Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9dc87c7b authored by Al Viro's avatar Al Viro
Browse files

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: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d26654e5
Loading
Loading
Loading
Loading
+2 −4
Original line number Original line Diff line number Diff line
@@ -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;