author | Rich Felker <dalias@aerifal.cx> | 2024年08月31日 12:34:13 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2024年08月31日 12:38:56 -0400 |
commit | 8c43c562694fd0436494dc9d3faabb3eea86f9d8 (patch) | |
tree | c47956ef36cc342339d93650ae6939aec4844186 /src | |
parent | 300a1f53907a4acaadd9a696d0c67eee6fc10430 (diff) | |
download | musl-8c43c562694fd0436494dc9d3faabb3eea86f9d8.tar.gz |
-rw-r--r-- | src/conf/sysconf.c | 9 |
diff --git a/src/conf/sysconf.c b/src/conf/sysconf.c index 60d3e745..8dd5c725 100644 --- a/src/conf/sysconf.c +++ b/src/conf/sysconf.c @@ -220,8 +220,13 @@ long sysconf(int name) return (mem > LONG_MAX) ? LONG_MAX : mem; case JT_MINSIGSTKSZ & 255: case JT_SIGSTKSZ & 255: ; - long val = __getauxval(AT_MINSIGSTKSZ); - if (val < MINSIGSTKSZ) val = MINSIGSTKSZ; + /* Value from auxv/kernel is only sigfame size. Clamp it + * to at least 1k below arch's traditional MINSIGSTKSZ, + * then add 1k of working space for signal handler. */ + unsigned long sigframe_sz = __getauxval(AT_MINSIGSTKSZ); + if (sigframe_sz < MINSIGSTKSZ - 1024) + sigframe_sz = MINSIGSTKSZ - 1024; + unsigned val = sigframe_sz + 1024; if (values[name] == JT_SIGSTKSZ) val += SIGSTKSZ - MINSIGSTKSZ; return val; |