From: bob picco <bpicco@xxxxxxxxxx> 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 <bpicco@xxxxxxxxxx> cc: stable@xxxxxxxxxxxxxxx --- 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 sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html