about summary refs log tree commit diff
path: root/src/signal/sigaltstack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/signal/sigaltstack.c')
-rw-r--r--src/signal/sigaltstack.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/signal/sigaltstack.c b/src/signal/sigaltstack.c
index 3cc2d456..6e46d098 100644
--- a/src/signal/sigaltstack.c
+++ b/src/signal/sigaltstack.c
@@ -1,8 +1,18 @@
 #include <signal.h>
+#include <errno.h>
 #include "syscall.h"
 
 int sigaltstack(const stack_t *ss, stack_t *old)
 {
-	/* depends on kernel struct matching */
+	if (ss) {
+		if (ss->ss_size < MINSIGSTKSZ) {
+			errno = ENOMEM;
+			return -1;
+		}
+		if (ss->ss_flags & ~SS_DISABLE) {
+			errno = EINVAL;
+			return -1;
+		}
+	}
 	return syscall2(__NR_sigaltstack, (long)ss, (long)old);
 }