Commit 62715ec8 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by David S. Miller

[SPARC64]: Kill bogus set_fs(KERNEL_DS) in do_rt_sigreturn().

From: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c1e49e3a
...@@ -289,9 +289,7 @@ void do_rt_sigreturn(struct pt_regs *regs) ...@@ -289,9 +289,7 @@ void do_rt_sigreturn(struct pt_regs *regs)
struct rt_signal_frame __user *sf; struct rt_signal_frame __user *sf;
unsigned long tpc, tnpc, tstate; unsigned long tpc, tnpc, tstate;
__siginfo_fpu_t __user *fpu_save; __siginfo_fpu_t __user *fpu_save;
mm_segment_t old_fs;
sigset_t set; sigset_t set;
stack_t st;
int err; int err;
/* Always make any pending restarted system calls return -EINTR */ /* Always make any pending restarted system calls return -EINTR */
...@@ -327,20 +325,13 @@ void do_rt_sigreturn(struct pt_regs *regs) ...@@ -327,20 +325,13 @@ void do_rt_sigreturn(struct pt_regs *regs)
err |= restore_fpu_state(regs, &sf->fpu_state); err |= restore_fpu_state(regs, &sf->fpu_state);
err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t)); err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t));
err |= __copy_from_user(&st, &sf->stack, sizeof(stack_t)); err |= do_sigaltstack(&sf->stack, NULL, (unsigned long)sf);
if (err) if (err)
goto segv; goto segv;
regs->tpc = tpc; regs->tpc = tpc;
regs->tnpc = tnpc; regs->tnpc = tnpc;
/* It is more difficult to avoid calling this function than to
call it and ignore errors. */
old_fs = get_fs();
set_fs(KERNEL_DS);
do_sigaltstack((const stack_t __user *) &st, NULL, (unsigned long)sf);
set_fs(old_fs);
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); spin_lock_irq(&current->sighand->siglock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment