diff options
author | Mike Frysinger <vapier@gentoo.org> | 2017-03-15 23:59:31 -0700 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2017-04-03 15:20:00 -0400 |
commit | df29db0bec24211cfc917db52024bf8deecac2c9 (patch) | |
tree | fbcfe6be682a36a774c48bcfb228a9a9799dcd86 /ChangeLog | |
parent | 74522eeeaa4a39809a28f44171e71d36a69edb58 (diff) | |
download | glibc-df29db0bec24211cfc917db52024bf8deecac2c9.tar.gz glibc-df29db0bec24211cfc917db52024bf8deecac2c9.tar.xz glibc-df29db0bec24211cfc917db52024bf8deecac2c9.zip |
posix_spawn: use a larger min stack for -fstack-check [BZ #21253]
When glibc is built with -fstack-check, trying to use posix_spawn can lead to segfaults due to gcc internally probing stack memory too far. The new spawn API will allocate a minimum of 1 page, but the stack checking logic might probe a couple of pages. When it tries to walk them, everything falls apart. The gcc internal docs [1] state the default interval checking is one page. Which means we need two pages (the current one, and the next probed). No target currently defines it larger. Further, it mentions that the default minimum stack size needed to recover from an overflow is 4/8KiB for sjlj or 8/12KiB for others. But some Linux targets (like mips and ppc) go up to 16KiB (and some non-Linux targets go up to 24KiB). Let's create each child with a minimum of 32KiB slack space to support them all, and give us future breathing room. No test is added as existing ones crash. Even a simple call is enough to trigger the problem: char *argv[] = { "/bin/ls", NULL }; posix_spawn(NULL, "/bin/ls", NULL, NULL, argv, NULL); [1] https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gccint/Stack-Checking.html (cherry picked from commit 21f042c804835d1f7a4a8e06f2c93ca35a182042)
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 321bf53191..b37a054bae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-04-03 Mike Frysinger <vapier@gentoo.org> + + [BZ #21253] + * sysdeps/unix/sysv/linux/spawni.c (__spawnix): Increase argv_size + slack space by 32KiB. + 2017-04-03 Wladimir van der Laan <laanwj@gmail.com> [BZ# 21338] |