Messages in this thread | | | From | (Eric W. Biederman) | Date | Thu, 11 Mar 2021 10:37:27 -0600 | Subject | Re: [PATCH v3] do_wait: make PIDTYPE_PID case O(1) instead of O(n) |
| |
Oleg Nesterov <oleg@redhat.com> writes:
> On 03/10, Eric W. Biederman wrote: >> >> Jim Newsome <jnewsome@torproject.org> writes: >> >> > +static int do_wait_pid(struct wait_opts *wo) >> > +{ >> > + struct task_struct *target = pid_task(wo->wo_pid, PIDTYPE_PID); >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >> This is subtle change in behavior. >> >> Today on the task->children list we only place thread group leaders. > > Aaah, yes, thanks Eric! > >> So the code either needs a thread_group_leader filter on target before >> the ptrace=0 case or we need to use "pid_task(wo->wo_pid, PIDTYPE_TGID)" >> and "pid_task(wo->wo_pid, PIDTYPE_PID)" for the "ptrace=1" case. > > Agreed, > >> I would like to make thread_group_leaders go away > > Hmm, why?
Mostly because we have class of very nasty bugs to fix because code thinks one thread is special.
There has been and I think still is code that mishandles zombie thread group leaders.
Particularly nasty are zombie thread group leaders after userspace has called setresuid in a way that changes signal permissions.
Eric
| |