On Sun, Mar 08, 2020 at 04:35:26PM -0500, Eric W. Biederman wrote:
Make it clear that current only needs to be computed once in flush_old_exec. This may have some efficiency improvements and it makes the code easier to change.
Signed-off-by: "Eric W. Biederman" ebiederm@xmission.com
modulo my suggestion of adding more comments (it could even be kerndoc!) that explicitly states that "me" should always be "current", yup, looks good:
Reviewed-by: Kees Cook keescook@chromium.org
-Kees
fs/exec.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/fs/exec.c b/fs/exec.c index db17be51b112..c3f34791f2f0 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1260,13 +1260,14 @@ void __set_task_comm(struct task_struct *tsk, const char *buf, bool exec) */ int flush_old_exec(struct linux_binprm * bprm) {
- struct task_struct *me = current; int retval;
/* * Make sure we have a private signal table and that * we are unassociated from the previous thread group. */
- retval = de_thread(current);
- retval = de_thread(me); if (retval) goto out;
@@ -1294,10 +1295,10 @@ int flush_old_exec(struct linux_binprm * bprm) bprm->mm = NULL; set_fs(USER_DS);
- current->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD |
- me->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD | PF_NOFREEZE | PF_NO_SETAFFINITY); flush_thread();
- current->personality &= ~bprm->per_clear;
- me->personality &= ~bprm->per_clear;
/* * We have to apply CLOEXEC before we change whether the process is @@ -1305,7 +1306,7 @@ int flush_old_exec(struct linux_binprm * bprm) * trying to access the should-be-closed file descriptors of a process * undergoing exec(2). */
- do_close_on_exec(current->files);
- do_close_on_exec(me->files); return 0;
out: -- 2.25.0