Re: [PATCH v4] kernel/signal: Signal-based pre-coredump notification

From: Enke Chen
Date: Fri Oct 26 2018 - 18:23:57 EST


Hi, Olge:

This is really a good idea given that "parent" is declared as RCU-protected.
Just a bit odd, though, that the "parent" has not been accessed this way in
the code base.

So just to confirm: the revised code would look like the following:

static void do_notify_parent_predump(void)
{
struct task_struct *parent;
int sig;

rcu_read_lock();
parent = rcu_dereference(current->parent);
sig = parent->signal->predump_signal;
if (sig != 0)
do_send_sig_info(sig, SEND_SIG_NOINFO, parent, PIDTYPE_TGID);
rcu_read_unlock();
}

Thank you so much for your help during this review. I would like to ack your
contribution in the "Reviewed-by:" field.

-- Enke

On 10/26/18 1:28 AM, Oleg Nesterov wrote:
> On 10/25, Enke Chen wrote:
>>
>> +static void do_notify_parent_predump(void)
>> +{
>> + struct task_struct *parent;
>> + int sig;
>> +
>> + read_lock(&tasklist_lock);
>> + parent = current->parent;
>> + sig = parent->signal->predump_signal;
>> + if (sig != 0)
>> + do_send_sig_info(sig, SEND_SIG_NOINFO, parent, PIDTYPE_TGID);
>> + read_unlock(&tasklist_lock);
>
> Ah. It is strange I didn't think about this before... Please, do not take
> tasklist_lock, use rcu_read_lock() instead. do_send_sig_info() uses the
> rcu-friendly lock_task_sighand(), so rcu_dereference(parent) should work
> fine.
>
> Oleg.
>