Merge tag 'execve-v6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Mar 2024 21:45:12 +0000 (14:45 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Mar 2024 21:45:12 +0000 (14:45 -0700)
Pull execve updates from Kees Cook:

 - Drop needless error path code in remove_arg_zero() (Li kunyu, Kees
   Cook)

 - binfmt_elf_efpic: Don't use missing interpreter's properties (Max
   Filippov)

 - Use /bin/bash for execveat selftests

* tag 'execve-v6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  exec: Simplify remove_arg_zero() error path
  selftests/exec: Perform script checks with /bin/bash
  exec: Delete unnecessary statements in remove_arg_zero()
  fs: binfmt_elf_efpic: don't use missing interpreter's properties

fs/binfmt_elf_fdpic.c
fs/exec.c
tools/testing/selftests/exec/execveat.c

index fefc642541cbe421af17506458af4d225c736374..1920ed69279b5805f21ba66772dd661b6e3042e8 100644 (file)
@@ -320,7 +320,7 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm)
        else
                executable_stack = EXSTACK_DEFAULT;
 
-       if (stack_size == 0) {
+       if (stack_size == 0 && interp_params.flags & ELF_FDPIC_FLAG_PRESENT) {
                stack_size = interp_params.stack_size;
                if (interp_params.flags & ELF_FDPIC_FLAG_EXEC_STACK)
                        executable_stack = EXSTACK_ENABLE_X;
index ece3ab0998e11ee3fb6f0e13d7766ae2c50b2968..ff6f26671cfc0207961267ee1b95155d0733e835 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1719,7 +1719,6 @@ static int prepare_binprm(struct linux_binprm *bprm)
  */
 int remove_arg_zero(struct linux_binprm *bprm)
 {
-       int ret = 0;
        unsigned long offset;
        char *kaddr;
        struct page *page;
@@ -1730,10 +1729,8 @@ int remove_arg_zero(struct linux_binprm *bprm)
        do {
                offset = bprm->p & ~PAGE_MASK;
                page = get_arg_page(bprm, bprm->p, 0);
-               if (!page) {
-                       ret = -EFAULT;
-                       goto out;
-               }
+               if (!page)
+                       return -EFAULT;
                kaddr = kmap_local_page(page);
 
                for (; offset < PAGE_SIZE && kaddr[offset];
@@ -1746,10 +1743,8 @@ int remove_arg_zero(struct linux_binprm *bprm)
 
        bprm->p++;
        bprm->argc--;
-       ret = 0;
 
-out:
-       return ret;
+       return 0;
 }
 EXPORT_SYMBOL(remove_arg_zero);
 
index bf79d664c8e698bbe200b69567436a687f4ebab2..0546ca24f2b20ceb7ee9deb26b80fc637c7a2ada 100644 (file)
@@ -393,7 +393,7 @@ static int run_tests(void)
 static void prerequisites(void)
 {
        int fd;
-       const char *script = "#!/bin/sh\nexit $*\n";
+       const char *script = "#!/bin/bash\nexit $*\n";
 
        /* Create ephemeral copies of files */
        exe_cp("execveat", "execveat.ephemeral");