Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20261030191109.5949-1-mailto.luca.kellermann@gmail.com>
Date: Fri, 30 Oct 2026 20:09:50 +0100
From: Luca Kellermann <mailto.luca.kellermann@...il.com>
To: musl@...ts.openwall.com
Subject: [PATCH] fix integer overflow in sigaddset, sigdelset and sigismember

if sig was INT_MIN a signed integer overflow would occur.

fix this by doing an unsigned subtraction.
---
 src/signal/sigaddset.c   | 2 +-
 src/signal/sigdelset.c   | 2 +-
 src/signal/sigismember.c | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/signal/sigaddset.c b/src/signal/sigaddset.c
index 085d1f4ab98d2d726ad401bebd89881e11c633af..e67412846ec65eae95f81bcb83a7b2ccc2e804f9 100644
--- a/src/signal/sigaddset.c
+++ b/src/signal/sigaddset.c
@@ -1,13 +1,13 @@
 #include <signal.h>
 #include <errno.h>
 
 int sigaddset(sigset_t *set, int sig)
 {
-	unsigned s = sig-1;
+	unsigned s = sig-1U;
 	if (s >= _NSIG-1 || sig-32U < 3) {
 		errno = EINVAL;
 		return -1;
 	}
 	set->__bits[s/8/sizeof *set->__bits] |= 1UL<<(s&8*sizeof *set->__bits-1);
 	return 0;
 }
diff --git a/src/signal/sigdelset.c b/src/signal/sigdelset.c
index ce69280e0cbf36f391b2a818114679143314a900..19573605082beb28e9daf048708a2275e2924879 100644
--- a/src/signal/sigdelset.c
+++ b/src/signal/sigdelset.c
@@ -1,13 +1,13 @@
 #include <signal.h>
 #include <errno.h>
 
 int sigdelset(sigset_t *set, int sig)
 {
-	unsigned s = sig-1;
+	unsigned s = sig-1U;
 	if (s >= _NSIG-1 || sig-32U < 3) {
 		errno = EINVAL;
 		return -1;
 	}
 	set->__bits[s/8/sizeof *set->__bits] &=~(1UL<<(s&8*sizeof *set->__bits-1));
 	return 0;
 }
diff --git a/src/signal/sigismember.c b/src/signal/sigismember.c
index ab87d62249de487cdb1c0990ffa26acf60160ade..e8673884fb6817ef1ba5e323ab3c790b9ff7a756 100644
--- a/src/signal/sigismember.c
+++ b/src/signal/sigismember.c
@@ -1,8 +1,8 @@
 #include <signal.h>
 
 int sigismember(const sigset_t *set, int sig)
 {
-	unsigned s = sig-1;
+	unsigned s = sig-1U;
 	if (s >= _NSIG-1) return 0;
 	return !!(set->__bits[s/8/sizeof *set->__bits] & 1UL<<(s&8*sizeof *set->__bits-1));
 }

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.