Re: 5.8-rc*: kernel BUG at kernel/signal.c:1917

From: Peter Zijlstra
Date: Mon Jul 20 2020 - 04:41:24 EST


On Mon, Jul 20, 2020 at 10:26:58AM +0200, Oleg Nesterov wrote:
> Peter,
>
> Let me add another note. TASK_TRACED/TASK_STOPPED was always protected by
> ->siglock. In particular, ttwu(__TASK_TRACED) must be always called with
> ->siglock held. That is why ptrace_freeze_traced() assumes it can safely
> do s/TASK_TRACED/__TASK_TRACED/ under spin_lock(siglock).
>
> Can this change race with
>
> if (signal_pending_state(prev->state, prev)) {
> prev->state = TASK_RUNNING;
> }
>
> in __schedule() ? Hopefully not, signal-state is protected by siglock too.
>
> So I think this logic was correct even if it doesn't look nice. But "doesn't
> look nice" is true for the whole ptrace code ;)

*groan*... another bit of obscure magic :-(

let me go try and wake up and figure out how best to deal with this.