From: bob picco <[email protected]> do_sigaltstack expects the stack we are returning to. An issue will manifest with an alternate stack. That is, a sigaltstack followed by a sigaction (aka. rt_sigaction) with SA_ONSTACK for flags will sigsegv. do_sigaltstack returns -EPERM having found on_sig_stack to be true and a sigsegv results.
Let's teach do_rt_sigreturn to provide do_sigaltstack with our target stack. Signed-off-by: Bob Picco <[email protected]> cc: [email protected] --- arch/sparc/kernel/signal_64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c index 1f905f6..f572586 100644 --- a/arch/sparc/kernel/signal_64.c +++ b/arch/sparc/kernel/signal_64.c @@ -295,7 +295,7 @@ void do_rt_sigreturn(struct pt_regs *regs) err |= restore_fpu_state(regs, fpu_save); err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t)); - err |= do_sigaltstack(&sf->stack, NULL, (unsigned long)sf); + err |= do_sigaltstack(&sf->stack, NULL, regs->u_regs[UREG_FP]); if (err) goto segv; -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
