[PATCH 6/9] signal: Always call do_notify_parent_cldstop with siglock held
Oleg Nesterov
oleg at redhat.com
Wed Apr 27 07:10:25 PDT 2022
On 04/26, Eric W. Biederman wrote:
>
> @@ -2164,7 +2166,9 @@ static void do_notify_parent_cldstop(struct task_struct *tsk,
> }
>
> sighand = parent->sighand;
> - spin_lock_irqsave(&sighand->siglock, flags);
> + lock = tsk->sighand != sighand;
> + if (lock)
> + spin_lock_nested(&sighand->siglock, SINGLE_DEPTH_NESTING);
But why is it safe?
Suppose we have two tasks, they both trace each other, both call
ptrace_stop() at the same time. Of course this is ugly, they both
will block.
But with this patch in this case we have the trivial ABBA deadlock,
no?
Oleg.
More information about the linux-um
mailing list