From d4e1df3a0349900851acdd8221fb983975356346 Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Tue, 23 Apr 2013 20:55:20 +0400 Subject: [PATCH] ptrace: don't call PTRACE_INTERRUPT many times According to the commit message in the kernel git, a new trap flag JOBCTL_TRAP_INTERRUPT is added, which is set on PTRACE_INTERRUPT and cleared when any trap happens. Currently we have a race window beetwen PTRACE_CONT and PTRACE_INTERRUPT. If a process stops before PTRACE_INTERRUPT, the flag JOBCTL_TRAP_INTERRUPT will be set once again. https://bugzilla.openvz.org/show_bug.cgi?id=2569 Signed-off-by: Andrey Vagin Acked-by: Cyrill Gorcunov Signed-off-by: Pavel Emelyanov --- ptrace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ptrace.c b/ptrace.c index ce20ce456..85f8f629e 100644 --- a/ptrace.c +++ b/ptrace.c @@ -88,13 +88,14 @@ int seize_task(pid_t pid, pid_t ppid, pid_t *pgid, pid_t *sid) pid, ppid, ps.ppid); goto err; } -try_again: + ret = ptrace(PTRACE_INTERRUPT, pid, NULL, NULL); if (ret < 0) { pr_perror("SEIZE %d: can't interrupt task", pid); goto err; } +try_again: ret = wait4(pid, &status, __WALL, NULL); if (ret < 0) { pr_perror("SEIZE %d: can't wait task", pid);