opr: Avoid sigwait on SIGWAITING 05/14705/2
authorAndrew Deason <adeason@sinenomine.net>
Mon, 19 Jul 2021 04:05:38 +0000 (23:05 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Tue, 20 Jul 2021 01:37:32 +0000 (21:37 -0400)
On AIX, calling sigwait() on a sigset containing SIGWAITING (or
SIGKILL or SIGSTOP), causes sigwait to return with an EINVAL error.
Currently, signalHandler() calls sigwait() with SIGWAITING, because
SIGWAITING is in the sigset returned by softsigSignalSet(). And so,
sigwait() returns EINVAL, and our opr_Verify in signalHandler() fails,
causing a crash.

To avoid this, remove SIGWAITING from the sigset in
softsigSignalSet(). This is AIX-specific, since the SIGWAITING signal
is AIX-specific.

Change-Id: I42539d859212605e6b1aaeb6a5eecb0ad034cea5
Reviewed-on: https://gerrit.openafs.org/14705
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/opr/softsig.c

index e3cbd53..0c5a78b 100644 (file)
@@ -59,6 +59,9 @@ softsigSignalSet(sigset_t *set)
     sigdelset(set, SIGPIPE);
     sigdelset(set, SIGSEGV);
     sigdelset(set, SIGTRAP);
+#ifdef AFS_AIX_ENV
+    sigdelset(set, SIGWAITING);
+#endif
 }
 
 static void *