From: ebiederm@xmission.com (Eric W. Biederman)
To: linux-security-module@vger.kernel.org
Subject: [PATCH v3 09/15] exec: Correct comments about "point of no return"
Date: Tue, 18 Jul 2017 19:45:52 -0500 [thread overview]
Message-ID: <874lu9b6f3.fsf@xmission.com> (raw)
In-Reply-To: <1500416736-49829-10-git-send-email-keescook@chromium.org> (Kees Cook's message of "Tue, 18 Jul 2017 15:25:30 -0700")
Kees Cook <keescook@chromium.org> writes:
> In commit 221af7f87b97 ("Split 'flush_old_exec' into two functions"),
> the comment about the point of no return should have stayed in
> flush_old_exec() since it refers to "bprm->mm = NULL;" line, but prior
> changes in commits c89681ed7d0e ("remove steal_locks()"), and
> fd8328be874f ("sanitize handling of shared descriptor tables in failing
> execve()") made it look like it meant the current->sas_ss_sp line instead.
>
> The comment was referring to the fact that once bprm->mm is NULL, all
> failures from a binfmt load_binary hook (e.g. load_elf_binary), will
> get SEGV raised against current. Move this comment and expand the
> explanation a bit, putting it above the assignment this time, and add
> details about the true nature of "point of no return" being the call
> to flush_old_exec() itself.
>
> This also removes an erroneous commet about when credentials are being
> installed. That has its own dedicated function, install_exec_creds(),
> which carries a similar (and correct) comment, so remove the bogus comment
> where installation is not actually happening.
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
>
> Cc: David Howells <dhowells@redhat.com>
> Cc: Eric W. Biederman <ebiederm@xmission.com>
> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---
> fs/exec.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/fs/exec.c b/fs/exec.c
> index 53ffa739fb58..f9480d3e0b82 100644
> --- a/fs/exec.c
> +++ b/fs/exec.c
> @@ -1258,6 +1258,12 @@ void __set_task_comm(struct task_struct *tsk, const char *buf, bool exec)
> perf_event_comm(tsk, exec);
> }
>
> +/*
> + * Calling this is the point of no return. None of the failures will be
> + * seen by userspace since either the process is already taking a fatal
> + * signal (via de_thread() or coredump), or will have SEGV raised
> + * (after exec_mmap()) by search_binary_handlers (see below).
> + */
> int flush_old_exec(struct linux_binprm * bprm)
> {
> int retval;
> @@ -1285,7 +1291,13 @@ int flush_old_exec(struct linux_binprm * bprm)
> if (retval)
> goto out;
>
> - bprm->mm = NULL; /* We're using it now */
> + /*
> + * After clearing bprm->mm (to mark that current is using the
> + * prepared mm now), we have nothing left of the original
> + * process. If anything from here on returns an error, the check
> + * in search_binary_handler() will SEGV current.
> + */
> + bprm->mm = NULL;
>
> set_fs(USER_DS);
> current->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD |
> @@ -1339,7 +1351,6 @@ void setup_new_exec(struct linux_binprm * bprm)
>
> arch_pick_mmap_layout(current->mm);
>
> - /* This is the point of no return */
> current->sas_ss_sp = current->sas_ss_size = 0;
>
> if (uid_eq(current_euid(), current_uid()) && gid_eq(current_egid(), current_gid()))
> @@ -1357,7 +1368,6 @@ void setup_new_exec(struct linux_binprm * bprm)
> */
> current->mm->task_size = TASK_SIZE;
>
> - /* install the new credentials */
> if (!uid_eq(bprm->cred->uid, current_euid()) ||
> !gid_eq(bprm->cred->gid, current_egid())) {
> current->pdeath_signal = 0;
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: ebiederm@xmission.com (Eric W. Biederman)
To: Kees Cook <keescook@chromium.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
David Howells <dhowells@redhat.com>,
John Johansen <john.johansen@canonical.com>,
"Serge E. Hallyn" <serge@hallyn.com>,
Paul Moore <paul@paul-moore.com>,
Stephen Smalley <sds@tycho.nsa.gov>,
Casey Schaufler <casey@schaufler-ca.com>,
Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
James Morris <james.l.morris@oracle.com>,
Andy Lutomirski <luto@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-fsdevel@vger.kernel.org,
linux-security-module@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 09/15] exec: Correct comments about "point of no return"
Date: Tue, 18 Jul 2017 19:45:52 -0500 [thread overview]
Message-ID: <874lu9b6f3.fsf@xmission.com> (raw)
In-Reply-To: <1500416736-49829-10-git-send-email-keescook@chromium.org> (Kees Cook's message of "Tue, 18 Jul 2017 15:25:30 -0700")
Kees Cook <keescook@chromium.org> writes:
> In commit 221af7f87b97 ("Split 'flush_old_exec' into two functions"),
> the comment about the point of no return should have stayed in
> flush_old_exec() since it refers to "bprm->mm = NULL;" line, but prior
> changes in commits c89681ed7d0e ("remove steal_locks()"), and
> fd8328be874f ("sanitize handling of shared descriptor tables in failing
> execve()") made it look like it meant the current->sas_ss_sp line instead.
>
> The comment was referring to the fact that once bprm->mm is NULL, all
> failures from a binfmt load_binary hook (e.g. load_elf_binary), will
> get SEGV raised against current. Move this comment and expand the
> explanation a bit, putting it above the assignment this time, and add
> details about the true nature of "point of no return" being the call
> to flush_old_exec() itself.
>
> This also removes an erroneous commet about when credentials are being
> installed. That has its own dedicated function, install_exec_creds(),
> which carries a similar (and correct) comment, so remove the bogus comment
> where installation is not actually happening.
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
>
> Cc: David Howells <dhowells@redhat.com>
> Cc: Eric W. Biederman <ebiederm@xmission.com>
> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---
> fs/exec.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/fs/exec.c b/fs/exec.c
> index 53ffa739fb58..f9480d3e0b82 100644
> --- a/fs/exec.c
> +++ b/fs/exec.c
> @@ -1258,6 +1258,12 @@ void __set_task_comm(struct task_struct *tsk, const char *buf, bool exec)
> perf_event_comm(tsk, exec);
> }
>
> +/*
> + * Calling this is the point of no return. None of the failures will be
> + * seen by userspace since either the process is already taking a fatal
> + * signal (via de_thread() or coredump), or will have SEGV raised
> + * (after exec_mmap()) by search_binary_handlers (see below).
> + */
> int flush_old_exec(struct linux_binprm * bprm)
> {
> int retval;
> @@ -1285,7 +1291,13 @@ int flush_old_exec(struct linux_binprm * bprm)
> if (retval)
> goto out;
>
> - bprm->mm = NULL; /* We're using it now */
> + /*
> + * After clearing bprm->mm (to mark that current is using the
> + * prepared mm now), we have nothing left of the original
> + * process. If anything from here on returns an error, the check
> + * in search_binary_handler() will SEGV current.
> + */
> + bprm->mm = NULL;
>
> set_fs(USER_DS);
> current->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD |
> @@ -1339,7 +1351,6 @@ void setup_new_exec(struct linux_binprm * bprm)
>
> arch_pick_mmap_layout(current->mm);
>
> - /* This is the point of no return */
> current->sas_ss_sp = current->sas_ss_size = 0;
>
> if (uid_eq(current_euid(), current_uid()) && gid_eq(current_egid(), current_gid()))
> @@ -1357,7 +1368,6 @@ void setup_new_exec(struct linux_binprm * bprm)
> */
> current->mm->task_size = TASK_SIZE;
>
> - /* install the new credentials */
> if (!uid_eq(bprm->cred->uid, current_euid()) ||
> !gid_eq(bprm->cred->gid, current_egid())) {
> current->pdeath_signal = 0;
next prev parent reply other threads:[~2017-07-19 0:45 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-18 22:25 [PATCH v3 00/15] exec: Use sane stack rlimit under secureexec Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-18 22:25 ` [PATCH v3 01/15] binfmt: Introduce secureexec flag Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 0:05 ` John Johansen
2017-07-19 0:05 ` John Johansen
2017-07-19 1:01 ` Andy Lutomirski
2017-07-19 1:01 ` Andy Lutomirski
2017-07-18 22:25 ` [PATCH v3 02/15] exec: Rename bprm->cred_prepared to called_set_creds Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 0:08 ` John Johansen
2017-07-19 0:08 ` John Johansen
2017-07-19 1:06 ` Andy Lutomirski
2017-07-19 1:06 ` Andy Lutomirski
2017-07-19 4:40 ` Kees Cook
2017-07-19 4:40 ` Kees Cook
2017-07-19 9:19 ` James Morris
2017-07-19 9:19 ` James Morris
2017-07-19 23:56 ` Paul Moore
2017-07-19 23:56 ` Paul Moore
2017-07-18 22:25 ` [PATCH v3 03/15] apparmor: Refactor to remove bprm_secureexec hook Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 0:00 ` John Johansen
2017-07-19 0:00 ` John Johansen
2017-07-19 9:21 ` James Morris
2017-07-19 9:21 ` James Morris
2017-07-18 22:25 ` [PATCH v3 04/15] selinux: " Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-20 0:03 ` Paul Moore
2017-07-20 0:03 ` Paul Moore
2017-07-20 0:19 ` Paul Moore
2017-07-20 0:19 ` Paul Moore
2017-07-20 1:37 ` Kees Cook
2017-07-20 1:37 ` Kees Cook
2017-07-20 13:42 ` Paul Moore
2017-07-20 13:42 ` Paul Moore
2017-07-20 17:06 ` Kees Cook
2017-07-20 17:06 ` Kees Cook
2017-07-20 20:42 ` Paul Moore
2017-07-20 20:42 ` Paul Moore
2017-07-21 15:40 ` Paul Moore
2017-07-21 15:40 ` Paul Moore
2017-07-21 17:37 ` Kees Cook
2017-07-21 17:37 ` Kees Cook
2017-07-21 19:16 ` Paul Moore
2017-07-21 19:16 ` Paul Moore
2017-07-18 22:25 ` [PATCH v3 05/15] smack: " Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-26 3:58 ` Kees Cook
2017-07-26 3:58 ` Kees Cook
2017-07-26 15:24 ` Casey Schaufler
2017-07-26 15:24 ` Casey Schaufler
2017-07-18 22:25 ` [PATCH v3 06/15] commoncap: " Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 1:10 ` Andy Lutomirski
2017-07-19 1:10 ` Andy Lutomirski
2017-07-19 4:41 ` Kees Cook
2017-07-19 4:41 ` Kees Cook
2017-07-20 4:53 ` Andy Lutomirski
2017-07-20 4:53 ` Andy Lutomirski
2017-07-31 22:43 ` Kees Cook
2017-07-31 22:43 ` Kees Cook
2017-08-01 13:12 ` Andy Lutomirski
2017-08-01 13:12 ` Andy Lutomirski
2017-07-19 9:26 ` James Morris
2017-07-19 9:26 ` James Morris
2017-07-18 22:25 ` [PATCH v3 07/15] commoncap: Move cap_elevated calculation into bprm_set_creds Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 1:52 ` Andy Lutomirski
2017-07-19 1:52 ` Andy Lutomirski
2017-07-19 9:28 ` James Morris
2017-07-19 9:28 ` James Morris
2017-07-18 22:25 ` [PATCH v3 08/15] LSM: drop bprm_secureexec hook Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 0:02 ` John Johansen
2017-07-19 0:02 ` John Johansen
2017-07-19 9:29 ` James Morris
2017-07-19 9:29 ` James Morris
2017-07-18 22:25 ` [PATCH v3 09/15] exec: Correct comments about "point of no return" Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 0:45 ` Eric W. Biederman [this message]
2017-07-19 0:45 ` Eric W. Biederman
2017-07-18 22:25 ` [PATCH v3 10/15] exec: Use secureexec for setting dumpability Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-26 3:59 ` Kees Cook
2017-07-26 3:59 ` Kees Cook
2017-07-18 22:25 ` [PATCH v3 11/15] exec: Use secureexec for clearing pdeath_signal Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-18 22:25 ` [PATCH v3 12/15] smack: Remove redundant pdeath_signal clearing Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-18 22:25 ` [PATCH v3 13/15] exec: Consolidate dumpability logic Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-18 22:25 ` [PATCH v3 14/15] exec: Use sane stack rlimit under secureexec Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-19 9:42 ` James Morris
2017-07-19 9:42 ` James Morris
2017-07-18 22:25 ` [PATCH v3 15/15] exec: Consolidate pdeath_signal clearing Kees Cook
2017-07-18 22:25 ` Kees Cook
2017-07-18 23:03 ` [PATCH v3 00/15] exec: Use sane stack rlimit under secureexec Linus Torvalds
2017-07-18 23:03 ` Linus Torvalds
2017-07-19 3:22 ` Serge E. Hallyn
2017-07-19 3:22 ` Serge E. Hallyn
2017-07-19 5:23 ` Kees Cook
2017-07-19 5:23 ` Kees Cook
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874lu9b6f3.fsf@xmission.com \
--to=ebiederm@xmission.com \
--cc=linux-security-module@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.