From: Markus Armbruster Date: Sun, 27 Dec 2020 07:18:27 +0000 (+0100) Subject: lwp: Fix handling of sigismember() failure X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=7481482656bba3d4217fc36182645a088dd763fb lwp: Fix handling of sigismember() failure sigismember() fails when passed an invalid or unsupported signal number. lwpInitSigWait() and lwpGetSig() treat sigismember() failure like "is a member". lwpInitSigWait() will then sigaction() unsuccessfully. Harmless. lwpGetSig() returns the bad signal number when it's greater than any caught signal's number. The bad signal number then gets returned to main(), which shuts down the server. Fix by treating failure like "is not a member". Signed-off-by: Markus Armbruster --- diff --git a/src/lib/lwp/sig.c b/src/lib/lwp/sig.c index cdf29709b..04fb9f977 100644 --- a/src/lib/lwp/sig.c +++ b/src/lib/lwp/sig.c @@ -69,7 +69,7 @@ lwpInitSigWait(sigset_t *set) act.sa_mask = *set; act.sa_handler = lwpCatchAwaitedSig; for (i = 0; i < NSIG; i++) { - if (sigismember(set, i)) + if (sigismember(set, i) > 0) sigaction(i, &act, NULL); } } @@ -95,7 +95,7 @@ lwpGetSig(sigset_t *set) sigprocmask(SIG_BLOCK, set, &save); for (i = NSIG - 1; i > 0; i--) { - if (sigismember(set, i) && sigismember(&LwpSigCaught, i)) { + if (sigismember(set, i) > 0 && sigismember(&LwpSigCaught, i) > 0) { lwpStatus(LwpCurrent, "Got awaited signal %d", i); sigdelset(&LwpSigCaught, i); break;