[PATCH] Do not trace children created with CLONE_UNTRACED flag
Wang Chao
wang.chao at cn.fujitsu.com
Wed Sep 8 03:56:49 UTC 2010
Sent on 2010-9-8 9:06, Roland McGrath wrote:
> On its face, there is no good reason why any one clone call ought to be
> treated different from another, in current kernels. In practice, nobody
> ever uses CLONE_UNTRACED today. AFAIK, it was only ever used by some
> old versions of linuxthreads (which has been obsolete for ages), and
> even those only wanted it for some ancient kernel versions where the
> ptrace wait interference was even worse than it is on non-ancient kernels.
>
> I imagine that your motivation is to make strace's -f behavior today
> match what it would do if implemented via PTRACE_O_TRACECLONE, where
> we'd give up the option of tracing CLONE_UNTRACED children. If that's
> so, then just be clear about it.
Yes, so it is. Actually, I am not sure whether there are someone or some
librarys using such flag. But I think since this flag still exists in
kernel, and maybe will not disappear in the near future, keep the same
logic with kernel may be a good idea.
>
> Now, to the change itself.
>
> I don't see why you've added a flag and everything.
> What doesn't work about just doing this:
>
> diff --git a/process.c b/process.c
> index 59d7ba0..ebba77b 100644
> --- a/process.c
> +++ b/process.c
> @@ -796,7 +796,7 @@ int
> internal_fork(struct tcb *tcp)
> {
> if (entering(tcp)) {
> - if (!followfork)
> + if (!followfork || (tcp->u_arg[ARG_FLAGS] & CLONE_UNTRACED))
> return 0;
> fork_tcb(tcp);
> if (setbpt(tcp) < 0)
>
Yeah, I forgot the macro ARG_FLAGS. This change seems much simpler and
it's a good idea. Also we may add this check on syscall exit.
Thanks,
Wang Chao
More information about the Strace-devel
mailing list