Skip to content

Commit

Permalink
sparc: switch to {get,put}_compat_sigset()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Al Viro committed Sep 19, 2017
1 parent c60a03f commit 68c38fb
Showing 1 changed file with 2 additions and 7 deletions.
9 changes: 2 additions & 7 deletions arch/sparc/kernel/signal32.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
compat_uptr_t fpu_save;
compat_uptr_t rwin_save;
sigset_t set;
compat_sigset_t seta;
int err, i;

/* Always make any pending restarted system calls return -EINTR */
Expand Down Expand Up @@ -311,7 +310,7 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
err |= __get_user(fpu_save, &sf->fpu_save);
if (!err && 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);
if (err)
goto segv;
Expand All @@ -322,7 +321,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
goto segv;
}

set.sig[0] = seta.sig[0] + (((long)seta.sig[1]) << 32);
set_current_blocked(&set);
return;
segv:
Expand Down Expand Up @@ -554,7 +552,6 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
void __user *tail;
int sigframe_size;
u32 psr;
compat_sigset_t seta;

/* 1. Make sure everything is clean */
synchronize_user_stack();
Expand Down Expand Up @@ -624,9 +621,7 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
/* Setup sigaltstack */
err |= __compat_save_altstack(&sf->stack, regs->u_regs[UREG_FP]);

seta.sig[1] = (oldset->sig[0] >> 32);
seta.sig[0] = oldset->sig[0];
err |= __copy_to_user(&sf->mask, &seta, sizeof(compat_sigset_t));
err |= put_compat_sigset(&sf->mask, oldset, sizeof(compat_sigset_t));

if (!wsaved) {
err |= copy_in_user((u32 __user *)sf,
Expand Down

0 comments on commit 68c38fb

Please sign in to comment.