diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-05-31 15:21:10 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-05-31 15:21:10 -0400 |
commit | 55d2e06ec5afee20d56fc8a48d4c4d75e9afdbe0 (patch) | |
tree | 39262cc55eb4ea2c4ba0e62fc4369944de5fa3c3 | |
parent | a4b2c07ff946363bc6465b301e94c0f3bd2f8de7 (diff) |
verify that the provided signal handler is executable
-rw-r--r-- | src/signal/signal.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/signal/signal.c b/src/signal/signal.c index ba8461b4..6a48b49a 100644 --- a/src/signal/signal.c +++ b/src/signal/signal.c @@ -2,6 +2,7 @@ #include "_signal.h" #include "_safety.h" #include "_syscall.h" +#include "_memperm.h" /** set a signal handler **/ @@ -33,6 +34,10 @@ void (*signal(int sig, void (*func)(int)))(int) return SIG_ERR; } + if ((__memperm(func) & PROT_EXEC) != PROT_EXEC) { + UNDEFINED("signal handler is not executable"); + } + void (*prev)(int) = ___signal.handlers[sig]; ___signal.handlers[sig] = func; |