From: Oleg Nesterov on
On 04/13, Peter Zijlstra wrote:
>
> On Sun, 2010-02-28 at 20:24 +0100, Raistlin wrote:
> >
> > +#define dl_se_signal(se, s, msg) \
> > + do { \
> > + struct task_struct *t = dl_task_of(se); \
> > + sigaddset(&t->pending.signal, s); \
> > + set_tsk_thread_flag(t, TIF_SIGPENDING); \
> > + printk(KERN_INFO msg "in %d (%s)\n", task_pid_nr(t), t->comm); \
> > + } while (0)
> > +

Without ->siglock?

This is racy even if dl_task_of(se) == current, but I guess it can
be !current. For example, we must never set TIF_SIGPENDING without
wake_up_state(). A fatal signal should kill the whole process, etc.
Even sigaddset() itself can race with tkill, it is not atomic.

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/