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: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
c60a03fee0
commit
68c38fb6ac
|
@ -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)
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
/* 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,
|
||||||
|
|
Loading…
Reference in New Issue