[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