Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

exec: Move would_dump into flush_old_exec

I goofed when I added mm->user_ns support to would_dump. I missed the
fact that in the case of binfmt_loader, binfmt_em86, binfmt_misc, and
binfmt_script bprm->file is reassigned. Which made the move of
would_dump from setup_new_exec to __do_execve_file before exec_binprm
incorrect as it can result in would_dump running on the script instead
of the interpreter of the script.

The net result is that the code stopped making unreadable interpreters
undumpable. Which allows them to be ptraced and written to disk
without special permissions. Oops.

The move was necessary because the call in set_new_exec was after
bprm->mm was no longer valid.

To correct this mistake move the misplaced would_dump from
__do_execve_file into flos_old_exec, before exec_mmap is called.

I tested and confirmed that without this fix I can attach with gdb to
a script with an unreadable interpreter, and with this fix I can not.

Cc: stable@vger.kernel.org
Fixes: f84df2a6f268 ("exec: Ensure mm->user_ns contains the execed files")
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>

+2 -2
+2 -2
fs/exec.c
··· 1317 1317 */ 1318 1318 set_mm_exe_file(bprm->mm, bprm->file); 1319 1319 1320 + would_dump(bprm, bprm->file); 1321 + 1320 1322 /* 1321 1323 * Release all of the old mmap stuff 1322 1324 */ ··· 1877 1875 retval = copy_strings(bprm->argc, argv, bprm); 1878 1876 if (retval < 0) 1879 1877 goto out; 1880 - 1881 - would_dump(bprm, bprm->file); 1882 1878 1883 1879 retval = exec_binprm(bprm); 1884 1880 if (retval < 0)