diff --git a/kernel/signal.c b/kernel/signal.c index ce95a76fe60ae983179451c7c47e3321284ce3b1..917b92c3b77f0b868865fb1b6526dbe1e4f5d30d 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -4056,6 +4056,15 @@ do_sigaltstack (const stack_t *ss, stack_t *oss, unsigned long sp, ss_mode != 0)) return -EINVAL; + /* + * Return before taking any locks if no actual + * sigaltstack changes were requested. + */ + if (t->sas_ss_sp == (unsigned long)ss_sp && + t->sas_ss_size == ss_size && + t->sas_ss_flags == ss_flags) + return 0; + sigaltstack_lock(); if (ss_mode == SS_DISABLE) { ss_size = 0;