sh64: fix altstack switching on sigreturn
incidentally, declaring a local variable as __user (!) to make sparse STFU is really sick. Especially since sparse had been 100% right - it *is* a bug. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
d26654e5f9
commit
9dc87c7b5b
1 changed files with 2 additions and 4 deletions
|
@ -347,7 +347,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
|
||||||
{
|
{
|
||||||
struct rt_sigframe __user *frame = (struct rt_sigframe __user *) (long) REF_REG_SP;
|
struct rt_sigframe __user *frame = (struct rt_sigframe __user *) (long) REF_REG_SP;
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
stack_t __user st;
|
|
||||||
long long ret;
|
long long ret;
|
||||||
|
|
||||||
/* Always make any pending restarted system calls return -EINTR */
|
/* Always make any pending restarted system calls return -EINTR */
|
||||||
|
@ -365,11 +364,10 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
|
||||||
goto badframe;
|
goto badframe;
|
||||||
regs->pc -= 4;
|
regs->pc -= 4;
|
||||||
|
|
||||||
if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
|
|
||||||
goto badframe;
|
|
||||||
/* It is more difficult to avoid calling this function than to
|
/* It is more difficult to avoid calling this function than to
|
||||||
call it and ignore errors. */
|
call it and ignore errors. */
|
||||||
do_sigaltstack(&st, NULL, REF_REG_SP);
|
if (do_sigaltstack(&frame->uc.uc_stack, NULL, REF_REG_SP) == -EFAULT)
|
||||||
|
goto badframe;
|
||||||
|
|
||||||
return (int) ret;
|
return (int) ret;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue