From aae823507c366d5a52ebef5627d667faeb444d89 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 27 Dec 2020 08:18:27 +0100 Subject: [PATCH] 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 --- src/lib/lwp/sig.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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; -- 2.43.0