diff options
Diffstat (limited to 'src/signal/signal.c')
-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; |