Messages in this thread | | | Date | Thu, 22 Oct 2015 15:51:35 +0200 | From | Denys Vlasenko <> | Subject | Re: [PATCH 1/2] wait/ptrace: always assume __WALL if the child is traced |
| |
On 10/20/2015 07:17 PM, Oleg Nesterov wrote: > creates the unreapable zombie if /sbin/init doesn't use __WALL. > > This is not a kernel bug, at least in a sense that everything works as > expected: debugger should reap a traced sub-thread before it can reap > the leader, but without __WALL/__WCLONE do_wait() ignores sub-threads. > > Unfortunately, it seems that /sbin/init in most (all?) distributions > doesn't use it and we have to change the kernel to avoid the problem. > > This patch just adds the "ptrace" check into eligible_child(). To some > degree this matches the "tsk->ptrace" in exit_notify(), ->exit_signal > is mostly ignored when the tracee reports to debugger. > > This obviously means the user-visible change: __WCLONE and __WALL no > longer have any meaning for debugger. And I can only hope that this > won't break something. > > We could make a more conservative change. Say, we can take __WCLONE > into account, or !thread_group_leader(). But it would be nice to not > complicate these historical/confusing checks.
For the record, I like this way of fixing the problem too.
It removes the need to ever use __WALL in userspace: IIRC the only case where it was needed are debuggers.
Which in turn makes *all* underscored wait flags (__WCLONE, __WALL, __WNOTHREAD) unnecessary for any sane application use.
| |