50f89d
commit 28669f86f6780a18daca264f32d66b1428c9c6f1
50f89d
Author: Stefan Liebler <stli@linux.ibm.com>
50f89d
Date:   Thu Sep 6 14:27:03 2018 +0200
50f89d
50f89d
    Fix segfault in maybe_script_execute.
50f89d
    
50f89d
    If glibc is built with gcc 8 and -march=z900,
50f89d
    the testcase posix/tst-spawn4-compat crashes with a segfault.
50f89d
    
50f89d
    In function maybe_script_execute, the new_argv array is dynamically
50f89d
    initialized on stack with (argc + 1) elements.
50f89d
    The function wants to add _PATH_BSHELL as the first argument
50f89d
    and writes out of bounds of new_argv.
50f89d
    There is an off-by-one because maybe_script_execute fails to count
50f89d
    the terminating NULL when sizing new_argv.
50f89d
    
50f89d
    ChangeLog:
50f89d
    
50f89d
            * sysdeps/unix/sysv/linux/spawni.c (maybe_script_execute):
50f89d
            Increment size of new_argv by one.
50f89d
50f89d
diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
50f89d
index cf0213ece55c675d..85239cedbf2a5ab5 100644
50f89d
--- a/sysdeps/unix/sysv/linux/spawni.c
50f89d
+++ b/sysdeps/unix/sysv/linux/spawni.c
50f89d
@@ -101,7 +101,7 @@ maybe_script_execute (struct posix_spawn_args *args)
50f89d
       ptrdiff_t argc = args->argc;
50f89d
 
50f89d
       /* Construct an argument list for the shell.  */
50f89d
-      char *new_argv[argc + 1];
50f89d
+      char *new_argv[argc + 2];
50f89d
       new_argv[0] = (char *) _PATH_BSHELL;
50f89d
       new_argv[1] = (char *) args->file;
50f89d
       if (argc > 1)