Re: [PATCH 3/3] exec: Rename the flag called_exec_mmap point_of_no_return

From: Kees Cook
Date: Tue Apr 07 2020 - 12:03:52 EST


On Mon, Apr 06, 2020 at 08:32:23PM -0500, Eric W. Biederman wrote:
>
> Update the comments and make the code easier to understand by
> renaming this flag.
>
> Signed-off-by: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx>

I like it, yes!

Acked-by: Kees Cook <keescook@xxxxxxxxxxxx>

-Kees

> ---
> fs/exec.c | 12 ++++++------
> include/linux/binfmts.h | 6 +++---
> 2 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/fs/exec.c b/fs/exec.c
> index 28c87020da9b..a61987d6dc33 100644
> --- a/fs/exec.c
> +++ b/fs/exec.c
> @@ -1300,12 +1300,12 @@ int flush_old_exec(struct linux_binprm * bprm)
> goto out;
>
> /*
> - * After setting bprm->called_exec_mmap (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.
> + * With the new mm installed it is completely impossible to
> + * fail and return to the original process. If anything from
> + * here on returns an error, the check in
> + * search_binary_handler() will SEGV current.
> */
> - bprm->called_exec_mmap = 1;
> + bprm->point_of_no_return = true;
> bprm->mm = NULL;
>
> #ifdef CONFIG_POSIX_TIMERS
> @@ -1694,7 +1694,7 @@ int search_binary_handler(struct linux_binprm *bprm)
>
> read_lock(&binfmt_lock);
> put_binfmt(fmt);
> - if (retval < 0 && bprm->called_exec_mmap) {
> + if (retval < 0 && bprm->point_of_no_return) {
> /* we got to flush_old_exec() and failed after it */
> read_unlock(&binfmt_lock);
> force_sigsegv(SIGSEGV);
> diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
> index 6f564b9ad882..8f479dad7931 100644
> --- a/include/linux/binfmts.h
> +++ b/include/linux/binfmts.h
> @@ -46,10 +46,10 @@ struct linux_binprm {
> */
> secureexec:1,
> /*
> - * Set by flush_old_exec, when exec_mmap has been called.
> - * This is past the point of no return.
> + * Set when errors can no longer be returned to the
> + * original userspace.
> */
> - called_exec_mmap:1;
> + point_of_no_return:1;
> #ifdef __alpha__
> unsigned int taso:1;
> #endif
> --
> 2.25.0
>

--
Kees Cook