exec: Factor bprm_execve out of do_execve_common
authorEric W. Biederman <ebiederm@xmission.com>
Sun, 12 Jul 2020 12:17:50 +0000 (07:17 -0500)
committerEric W. Biederman <ebiederm@xmission.com>
Tue, 21 Jul 2020 13:24:52 +0000 (08:24 -0500)
commit0c9cdff054aec0836bb38a449e860793849c3f84
tree51f745662feaf6791b8f257e526ef83bbcc9f644
parentf18ac551e5035a52fd8edadc45e0f8eb4cec8d3e
exec: Factor bprm_execve out of do_execve_common

Currently it is necessary for the usermode helper code and the code
that launches init to use set_fs so that pages coming from the kernel
look like they are coming from userspace.

To allow that usage of set_fs to be removed cleanly the argument
copying from userspace needs to happen earlier.  Factor bprm_execve
out of do_execve_common to separate out the copying of arguments
to the newe stack, and the rest of exec.

In separating bprm_execve from do_execve_common the copying
of the arguments onto the new stack happens earlier.

As the copying of the arguments does not depend any security hooks,
files, the file table, current->in_execve, current->fs->in_exec,
bprm->unsafe, or creds this is safe.

Likewise the security hook security_creds_for_exec does not depend upon
preventing the argument copying from happening.

In addition to making it possible to implement kernel_execve that
performs the copying differently, this separation of bprm_execve from
do_execve_common makes for a nice separation of responsibilities making
the exec code easier to navigate.

Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lkml.kernel.org/r/878sfm6x6x.fsf@x220.int.ebiederm.org
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/exec.c