[CRIU] [PATCH] ptrace: don't call PTRACE_INTERRUPT many times
Andrey Vagin
avagin at openvz.org
Tue Apr 23 08:54:53 EDT 2013
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 <avagin at openvz.org>
---
ptrace.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/ptrace.c b/ptrace.c
index ce20ce4..85f8f62 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);
--
1.8.2
More information about the CRIU
mailing list