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

- From: Matt Fleming \<hidden\>
- Date: 2012-02-14 17:59:48 
- List: linux-arch
- Page: https://ratatoskr.run/linux-arch/2012/02/3822386
- Thread: https://ratatoskr.run/linux-arch/2012/02/3822231/t.md

```text
On Tue, 2012-02-14 at 15:56 +0000, 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.

->blocked can only ever be altered by current, not another thread. See
the following comment from sigprocmask() in kernel/signal.c,

       /* Lockless, only current can change ->blocked, never from irq */
        if (oldset)                                                                                      
                *oldset = tsk->blocked;                                                                  

-- 
Matt Fleming, Intel Open Source Technology Center
```
