exec: use force_uaccess_begin during exec and exit
Both exec and exit want to ensure that the uaccess routines actually do access user pointers. Use the newly added force_uaccess_begin helper instead of an open coded set_fs for that to prepare for kernel builds where set_fs() does not exist. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Cc: Nick Hu <nickhu@andestech.com> Cc: Greentime Hu <green.hu@gmail.com> Cc: Vincent Chen <deanbo422@gmail.com> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Link: http://lkml.kernel.org/r/20200710135706.537715-7-hch@lst.de Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
3d13f313ce
Коммит
fe81417596
|
@ -1402,7 +1402,12 @@ int begin_new_exec(struct linux_binprm * bprm)
|
|||
if (retval)
|
||||
goto out_unlock;
|
||||
|
||||
set_fs(USER_DS);
|
||||
/*
|
||||
* Ensure that the uaccess routines can actually operate on userspace
|
||||
* pointers:
|
||||
*/
|
||||
force_uaccess_begin();
|
||||
|
||||
me->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD |
|
||||
PF_NOFREEZE | PF_NO_SETAFFINITY);
|
||||
flush_thread();
|
||||
|
|
|
@ -732,7 +732,7 @@ void __noreturn do_exit(long code)
|
|||
* mm_release()->clear_child_tid() from writing to a user-controlled
|
||||
* kernel address.
|
||||
*/
|
||||
set_fs(USER_DS);
|
||||
force_uaccess_begin();
|
||||
|
||||
if (unlikely(in_atomic())) {
|
||||
pr_info("note: %s[%d] exited with preempt_count %d\n",
|
||||
|
|
Загрузка…
Ссылка в новой задаче