On 08/18, Roland McGrath wrote: > > > In particular, this means that > > > > if (event || (clone_flags & CLONE_PTRACE)) { > > child_engine = utrace_attach_task(child, UTRACE_ATTACH_CREATE > > ... > > > > is not right. CLONE_PTRACE should be ignored unless task_ptrace(current). > > Ok, well this is implicitly assuming that ptrace won't properly detach its > utrace engine when it should. In the case of PTRACE_DETACH, the tracee > (potential parent, here) must be stopped, so it cannot be forking at the > time. So you must be worried only about the exit_ptrace() case.
Yes. > The code triggered from report_clone that adds the new child to the > tracer's tracees list has to synchronize with exit_ptrace() anyway. So > that logic should also cover setup/teardown of the utrace engine. Yes. That is why I mentioned ptrace_traceme(), it has to avoid the similar races with the exiting parent. Oleg.