Yes, it should be p->sighand->siglock.
Actually, I was going to change another caller, do_task_stat(), to call
collect_sigign_sigcatch() without ->siglock too, but now I am not sure
when/if this will happen.
OK, thanks, I'll send the patch to make rcu_dereference_check() happy.
While we are here... __exit_signal() does
sighand = rcu_dereference_check(tsk->sighand,
rcu_read_lock_held() ||
lockdep_tasklist_lock_is_held());
What is the point? We know that the single caller must hold tasklist,
otherwise everything is broken. Perhaps it would be better to
use rcu_dereference_raw() ?
In fact, I don't really understand why __exit_signal() needs
rcu_dereference() at all.
Oleg.
--