From: Wang Chao Date: Thu, 16 Sep 2010 03:20:56 +0000 (+0800) Subject: Do not trace children cloned with CLONE_UNTRACED flag X-Git-Tag: v4.6~79 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e636c8516567642ed1ef0b281739f90650a6e109;p=strace Do not trace children cloned with CLONE_UNTRACED flag If clone is called with flag CLONE_UNTRACED, to be consistent with option PTRACE_O_TRACECLONE, we should not set CLONE_PTRACE flag on its arguments. * process.c [LINUX] (internal_fork): Check the syscall and arguments. Signed-off-by: Wang Chao --- diff --git a/process.c b/process.c index 8999fc67..2366d1f3 100644 --- a/process.c +++ b/process.c @@ -796,8 +796,17 @@ int internal_fork(struct tcb *tcp) { if (entering(tcp)) { + tcp->flags &= ~TCB_FOLLOWFORK; if (!followfork) return 0; + /* + * In occasion of using PTRACE_O_TRACECLONE, we won't see the + * new child if clone is called with flag CLONE_UNTRACED, so + * we keep the same logic with that option and don't trace it. + */ + if ((sysent[tcp->scno].sys_func == sys_clone) && + (tcp->u_arg[ARG_FLAGS] & CLONE_UNTRACED)) + return 0; fork_tcb(tcp); if (setbpt(tcp) < 0) return 0;