From 7afdfb150f3ff606981051dd78c1c0556f203f00 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 7 Aug 2024 17:01:35 +0300 Subject: [PATCH] LibC: Rewrite sigprocmask in terms of pthread_sigmask Also don't fail SYS_SIGPROCMASK if how is invalid and set is NULL. --- kernel/kernel/Process.cpp | 14 +++----------- userspace/libraries/LibC/signal.cpp | 7 ++++++- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 3805df72..35c535e4 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -1826,16 +1826,6 @@ namespace Kernel BAN::ErrorOr Process::sys_sigprocmask(int how, const sigset_t* set, sigset_t* oset) { - switch (how) - { - case SIG_BLOCK: - case SIG_SETMASK: - case SIG_UNBLOCK: - break; - default: - return BAN::Error::from_errno(EINVAL); - } - LockGuard _(m_process_lock); if (set) TRY(validate_pointer_access(set, sizeof(sigset_t))); @@ -1857,8 +1847,10 @@ namespace Kernel Thread::current().m_signal_block_mask = mask; break; case SIG_UNBLOCK: - Thread::current().m_signal_block_mask &= mask; + Thread::current().m_signal_block_mask &= ~mask; break; + default: + return BAN::Error::from_errno(EINVAL); } } diff --git a/userspace/libraries/LibC/signal.cpp b/userspace/libraries/LibC/signal.cpp index c11c73f8..991fbce2 100644 --- a/userspace/libraries/LibC/signal.cpp +++ b/userspace/libraries/LibC/signal.cpp @@ -19,6 +19,11 @@ void psignal(int signum, const char* message) fprintf(stderr, "%s\n", strsignal(signum)); } +int pthread_sigmask(int how, const sigset_t* __restrict set, sigset_t* __restrict oset) +{ + return syscall(SYS_SIGPROCMASK, how, set, oset); +} + int raise(int sig) { // FIXME: won't work after multithreaded @@ -72,5 +77,5 @@ int sigpending(sigset_t* set) int sigprocmask(int how, const sigset_t* __restrict set, sigset_t* __restrict oset) { - return syscall(SYS_SIGPROCMASK, how, set, oset); + return pthread_sigmask(how, set, oset); }