From 2f27f20b1abf73fa216c4d9ca2530a04373c8e39 Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 3 Jun 2026 20:07:50 -0300 Subject: [PATCH] poll: fix ppoll signal masking --- kernel-src/sys/syscalls/poll.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kernel-src/sys/syscalls/poll.c b/kernel-src/sys/syscalls/poll.c index 3496ca85..8742762c 100644 --- a/kernel-src/sys/syscalls/poll.c +++ b/kernel-src/sys/syscalls/poll.c @@ -134,10 +134,15 @@ syscallret_t syscall_ppoll(context_t *context, pollfd_t *fds, size_t nfds, times return ret; signal_changemask(current_thread(), SIG_SETMASK, &sigset, &savedset); - signal_returnmask(current_thread(), &savedset); } syscallret_t ret = syscall_poll(context, fds, nfds, utimeout ? (timeout.s * 1000 + timeout.ns / 1000000) : -1); + if (usigset) { + if (ret.errno == EINTR) + signal_returnmask(current_thread(), &savedset); + else + signal_changemask(current_thread(), SIG_SETMASK, &savedset, NULL); + } return ret; }