Commit 68c38fb6 authored by Al Viro's avatar Al Viro

sparc: switch to {get,put}_compat_sigset()

slightly more complicated than usual, since old sigframe layout
on sparc keeps the first 32 bits of mask away from the rest
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c60a03fe
...@@ -248,7 +248,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) ...@@ -248,7 +248,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
compat_uptr_t fpu_save; compat_uptr_t fpu_save;
compat_uptr_t rwin_save; compat_uptr_t rwin_save;
sigset_t set; sigset_t set;
compat_sigset_t seta;
int err, i; int err, i;
/* Always make any pending restarted system calls return -EINTR */ /* Always make any pending restarted system calls return -EINTR */
...@@ -311,7 +310,7 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) ...@@ -311,7 +310,7 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
err |= __get_user(fpu_save, &sf->fpu_save); err |= __get_user(fpu_save, &sf->fpu_save);
if (!err && fpu_save) if (!err && fpu_save)
err |= restore_fpu_state(regs, compat_ptr(fpu_save)); err |= restore_fpu_state(regs, compat_ptr(fpu_save));
err |= copy_from_user(&seta, &sf->mask, sizeof(compat_sigset_t)); err |= get_compat_sigset(&set, &sf->mask);
err |= compat_restore_altstack(&sf->stack); err |= compat_restore_altstack(&sf->stack);
if (err) if (err)
goto segv; goto segv;
...@@ -322,7 +321,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) ...@@ -322,7 +321,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
goto segv; goto segv;
} }
set.sig[0] = seta.sig[0] + (((long)seta.sig[1]) << 32);
set_current_blocked(&set); set_current_blocked(&set);
return; return;
segv: segv:
...@@ -554,7 +552,6 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs, ...@@ -554,7 +552,6 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
void __user *tail; void __user *tail;
int sigframe_size; int sigframe_size;
u32 psr; u32 psr;
compat_sigset_t seta;
/* 1. Make sure everything is clean */ /* 1. Make sure everything is clean */
synchronize_user_stack(); synchronize_user_stack();
...@@ -624,9 +621,7 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs, ...@@ -624,9 +621,7 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
/* Setup sigaltstack */ /* Setup sigaltstack */
err |= __compat_save_altstack(&sf->stack, regs->u_regs[UREG_FP]); err |= __compat_save_altstack(&sf->stack, regs->u_regs[UREG_FP]);
seta.sig[1] = (oldset->sig[0] >> 32); err |= put_compat_sigset(&sf->mask, oldset, sizeof(compat_sigset_t));
seta.sig[0] = oldset->sig[0];
err |= __copy_to_user(&sf->mask, &seta, sizeof(compat_sigset_t));
if (!wsaved) { if (!wsaved) {
err |= copy_in_user((u32 __user *)sf, err |= copy_in_user((u32 __user *)sf,
......
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