From 66700b2c86dbef43c2b14800f84caa06eb9d2864 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 5 Dec 2016 15:50:47 +0100 Subject: executor: change the way we wait for children waitpid(pid) does not work if child invokes ptrace(PTRACE_TRACEME): https://groups.google.com/forum/#!topic/syzkaller/SjWzOnNRRIU Use waitpid(-1) instead. --- executor/common.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'executor/common.h') diff --git a/executor/common.h b/executor/common.h index 19da79b5e..472db554c 100644 --- a/executor/common.h +++ b/executor/common.h @@ -658,7 +658,7 @@ void loop() int status = 0; uint64_t start = current_time_ms(); for (;;) { - int res = waitpid(pid, &status, __WALL | WNOHANG); + int res = waitpid(-1, &status, __WALL | WNOHANG); int errno0 = errno; if (res == pid) break; @@ -666,7 +666,8 @@ void loop() if (current_time_ms() - start > 5 * 1000) { kill(-pid, SIGKILL); kill(pid, SIGKILL); - waitpid(pid, &status, __WALL); + while (waitpid(-1, &status, __WALL) != pid) { + } break; } } -- cgit mrf-deployment