On January 24, 2020 5:59:08 AM GMT+01:00, madhuparnabhowmik10@xxxxxxxxx wrote: >From: Madhuparna Bhowmik <madhuparnabhowmik10@xxxxxxxxx> > >This patch fixes the following sparse errors by annotating the >sighand_struct with __rcu > >kernel/fork.c:1511:9: error: incompatible types in comparison >expression >kernel/exit.c:100:19: error: incompatible types in comparison >expression >kernel/signal.c:1370:27: error: incompatible types in comparison >expression > >This fix introduces the following sparse error in signal.c due to >checking the sighand pointer without rcu primitives: > >kernel/signal.c:1386:21: error: incompatible types in comparison >expression > >This new sparse error is also fixed in this patch. > >Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@xxxxxxxxx> >--- > include/linux/sched.h | 2 +- > kernel/signal.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > >diff --git a/include/linux/sched.h b/include/linux/sched.h >index b511e178a89f..7a351360ad54 100644 >--- 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); > } If Paul is happy with this and nobody wants to take it I'll pick this up. Thanks! Christian