diff options
author | Stefan Liebler <stli@linux.ibm.com> | 2018-09-06 14:27:03 +0200 |
---|---|---|
committer | Stefan Liebler <stli@linux.ibm.com> | 2018-09-06 14:27:03 +0200 |
commit | 28669f86f6780a18daca264f32d66b1428c9c6f1 (patch) | |
tree | 5d84685410e38ea533838ad1785ad4d037b302a5 | |
parent | a33650d1a63b4e5d52ef02bb629d045c217e16ff (diff) | |
download | glibc-28669f86f6780a18daca264f32d66b1428c9c6f1.tar glibc-28669f86f6780a18daca264f32d66b1428c9c6f1.tar.gz glibc-28669f86f6780a18daca264f32d66b1428c9c6f1.tar.bz2 glibc-28669f86f6780a18daca264f32d66b1428c9c6f1.zip |
Fix segfault in maybe_script_execute.
If glibc is built with gcc 8 and -march=z900,
the testcase posix/tst-spawn4-compat crashes with a segfault.
In function maybe_script_execute, the new_argv array is dynamically
initialized on stack with (argc + 1) elements.
The function wants to add _PATH_BSHELL as the first argument
and writes out of bounds of new_argv.
There is an off-by-one because maybe_script_execute fails to count
the terminating NULL when sizing new_argv.
ChangeLog:
* sysdeps/unix/sysv/linux/spawni.c (maybe_script_execute):
Increment size of new_argv by one.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/spawni.c | 2 |
2 files changed, 6 insertions, 1 deletions
@@ -1,3 +1,8 @@ +2018-09-06 Stefan Liebler <stli@linux.ibm.com> + + * sysdeps/unix/sysv/linux/spawni.c (maybe_script_execute): + Increment size of new_argv by one. + 2018-09-05 Rafal Luzynski <digitalfreak@lingonborough.com> [BZ #17426] diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c index cf0213ece5..85239cedbf 100644 --- a/sysdeps/unix/sysv/linux/spawni.c +++ b/sysdeps/unix/sysv/linux/spawni.c @@ -101,7 +101,7 @@ maybe_script_execute (struct posix_spawn_args *args) ptrdiff_t argc = args->argc; /* Construct an argument list for the shell. */ - char *new_argv[argc + 1]; + char *new_argv[argc + 2]; new_argv[0] = (char *) _PATH_BSHELL; new_argv[1] = (char *) args->file; if (argc > 1) |