summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/signal/signal.c5
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;