X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fsignal%2Fsigaltstack.c;h=d3a6e8215f83c3d0a8038a6d0eee2bc228b104e5;hb=0c277ff156749628c678257f878d3a6edb5868de;hp=3cc2d456b3bb572a6dc6af926b6a4ddc6a198762;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/signal/sigaltstack.c b/src/signal/sigaltstack.c index 3cc2d456..d3a6e821 100644 --- a/src/signal/sigaltstack.c +++ b/src/signal/sigaltstack.c @@ -1,8 +1,18 @@ #include +#include #include "syscall.h" -int sigaltstack(const stack_t *ss, stack_t *old) +int sigaltstack(const stack_t *restrict ss, stack_t *restrict old) { - /* depends on kernel struct matching */ - return syscall2(__NR_sigaltstack, (long)ss, (long)old); + if (ss) { + if (!(ss->ss_flags & SS_DISABLE) && ss->ss_size < MINSIGSTKSZ) { + errno = ENOMEM; + return -1; + } + if (ss->ss_flags & SS_ONSTACK) { + errno = EINVAL; + return -1; + } + } + return syscall(SYS_sigaltstack, ss, old); }