diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-09-20 15:49:09 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-11-28 21:46:11 -0500 |
commit | d26654e5f9cd27815ab5bc8148c826f3b960396c (patch) | |
tree | 1b3ec491b709e3ed9f1b2d80e7bc4f1debe24b4c /arch/openrisc | |
parent | 9436d5c32b1ac8d4efdbc933611b5e699908854e (diff) | |
download | op-kernel-dev-d26654e5f9cd27815ab5bc8148c826f3b960396c.zip op-kernel-dev-d26654e5f9cd27815ab5bc8148c826f3b960396c.tar.gz |
openrisk: fix altstack switching on sigreturn
do_sigaltstack() expects _userland_ address, TYVM...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/openrisc')
-rw-r--r-- | arch/openrisc/kernel/signal.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/openrisc/kernel/signal.c b/arch/openrisc/kernel/signal.c index 3011029..ddedc8a 100644 --- a/arch/openrisc/kernel/signal.c +++ b/arch/openrisc/kernel/signal.c @@ -84,7 +84,6 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs) { struct rt_sigframe *frame = (struct rt_sigframe __user *)regs->sp; sigset_t set; - stack_t st; /* * Since we stacked the signal on a dword boundary, @@ -104,11 +103,10 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs) if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) goto badframe; - if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st))) - goto badframe; /* It is more difficult to avoid calling this function than to call it and ignore errors. */ - do_sigaltstack(&st, NULL, regs->sp); + if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT) + goto badframe; return regs->gpr[11]; |