# Re: \[PATCH 20/40\] mn10300: Use set\_current\_blocked() and block\_sigmask()

- From: Oleg Nesterov \<oleg@redhat.com\>
- Date: 2012-02-14 17:30:29 
- List: linux-arch
- Page: https://ratatoskr.run/linux-arch/2012/02/3822378
- Thread: https://ratatoskr.run/linux-arch/2012/02/3822231/t.md

```text
On 02/14, David Howells wrote:
>
> Matt Fleming [ref] wrote:
>
> >  asmlinkage long 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;
>
> Can this line create a race, now that it's not protected by a lock?  It is
> possible for current->blocked to get altered by another thread.

No, only current can change ->blocked. This is even documented in
sigprocmask(). And more, the only correct way to change ->blocked
is set_current_blocked(). OK, with a couple of "I know what I am
doing" exceptions in kernel/signal.c.

Oleg.
```
