On Mon, Jan 27, 2020 at 10:29:52AM +0100, Oleg Nesterov wrote: > On 01/24, madhuparnabhowmik10@xxxxxxxxx wrote: > > > > --- a/include/linux/sched.h > > +++ b/include/linux/sched.h > > @@ -918,7 +918,7 @@ struct task_struct { > > > > /* Signal handlers: */ > > struct signal_struct *signal; > > - struct sighand_struct *sighand; > > + struct sighand_struct __rcu *sighand; > > sigset_t blocked; > > sigset_t real_blocked; > > /* Restored if set_restore_sigmask() was used: */ > > diff --git a/kernel/signal.c b/kernel/signal.c > > index bcd46f547db3..9ad8dea93dbb 100644 > > --- a/kernel/signal.c > > +++ b/kernel/signal.c > > @@ -1383,7 +1383,7 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk, > > * must see ->sighand == NULL. > > */ > > spin_lock_irqsave(&sighand->siglock, *flags); > > - if (likely(sighand == tsk->sighand)) > > + if (likely(sighand == rcu_access_pointer(tsk->sighand))) > > break; > > spin_unlock_irqrestore(&sighand->siglock, *flags); > > } > > ACK, Applied. Thanks Paul and Oleg! Christian