diff options
author | Rich Felker <dalias@aerifal.cx> | 2019-03-05 11:02:15 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2019-03-05 11:08:46 -0500 |
commit | 4918b7fb0d9f3d3fd4b46be3313901fbd772064b (patch) | |
tree | 9559680400635982c454e54a648d2627758dae04 /src/signal | |
parent | 43e7efb46555f13a556d92944ac05c19b8929b60 (diff) | |
download | musl-4918b7fb0d9f3d3fd4b46be3313901fbd772064b.tar.gz musl-4918b7fb0d9f3d3fd4b46be3313901fbd772064b.tar.xz musl-4918b7fb0d9f3d3fd4b46be3313901fbd772064b.zip |
don't reject unknown/future flags in sigaltstack, allow SS_AUTODISARM
historically, and likely accidentally, sigaltstack was specified to fail with EINVAL if any flag bit other than SS_DISABLE was set. the resolution of Austin Group issue 1187 fixes this so that the requirement is only to fail for SS_ONSTACK (which cannot be set) or "invalid" flags. Linux fails on the kernel side for invalid flags, but historically accepts SS_ONSTACK as a no-op, so it needs to be rejected in userspace still. with this change, the Linux-specific SS_AUTODISARM, provided since commit 9680e1d03a794b0e0d5815c749478228ed40a36d but unusable due to rejection at runtime, is now usable.
Diffstat (limited to 'src/signal')
-rw-r--r-- | src/signal/sigaltstack.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/signal/sigaltstack.c b/src/signal/sigaltstack.c index 62cb81ad..cfa3f5c1 100644 --- a/src/signal/sigaltstack.c +++ b/src/signal/sigaltstack.c @@ -9,7 +9,7 @@ int sigaltstack(const stack_t *restrict ss, stack_t *restrict old) errno = ENOMEM; return -1; } - if (ss->ss_flags & ~SS_DISABLE) { + if (ss->ss_flags & SS_ONSTACK) { errno = EINVAL; return -1; } |