[PATCH/v3] Do not trace children with CLONE_UNTRACED flag

Wang Chao wang.chao at cn.fujitsu.com
Thu Sep 16 03:20:56 UTC 2010


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 <wang.chao at cn.fujitsu.com>
---
 process.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/process.c b/process.c
index 8999fc6..f246bcb 100644
--- a/process.c
+++ b/process.c
@@ -796,8 +796,16 @@ 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 dont'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;
-- 
1.6.5.2





More information about the Strace-devel mailing list