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.