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

Commit 3982294b authored by Oleg Nesterov's avatar Oleg Nesterov Committed by H. Peter Anvin
Browse files

x86, signals: Convert the X86_32 code to use set_current_blocked()



sys_sigsuspend() and sys_sigreturn() change ->blocked directly.
This is not correct, see the changelog in e6fa16ab
"signal: sigprocmask() should do retarget_shared_pending()"

Change them to use set_current_blocked().

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Link: http://lkml.kernel.org/r/20110710192727.GA31759@redhat.com


Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
parent 905f29e2
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -485,17 +485,18 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
asmlinkage int
sys_sigsuspend(int history0, int history1, old_sigset_t mask)
{
	mask &= _BLOCKABLE;
	spin_lock_irq(&current->sighand->siglock);
	sigset_t blocked;

	current->saved_sigmask = current->blocked;
	siginitset(&current->blocked, mask);
	recalc_sigpending();
	spin_unlock_irq(&current->sighand->siglock);

	mask &= _BLOCKABLE;
	siginitset(&blocked, mask);
	set_current_blocked(&blocked);

	current->state = TASK_INTERRUPTIBLE;
	schedule();
	set_restore_sigmask();

	set_restore_sigmask();
	return -ERESTARTNOHAND;
}

@@ -572,10 +573,7 @@ unsigned long sys_sigreturn(struct pt_regs *regs)
		goto badframe;

	sigdelsetmask(&set, ~_BLOCKABLE);
	spin_lock_irq(&current->sighand->siglock);
	current->blocked = set;
	recalc_sigpending();
	spin_unlock_irq(&current->sighand->siglock);
	set_current_blocked(&set);

	if (restore_sigcontext(regs, &frame->sc, &ax))
		goto badframe;