[CRIU] [PATCH] ptrace: call wait only if PTRACE_SEIZE was successful
Andrey Vagin
avagin at openvz.org
Tue Feb 24 06:19:12 PST 2015
and print errno for the wait syscall in an error case
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
ptrace.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/ptrace.c b/ptrace.c
index 70290eb..be6b67b 100644
--- a/ptrace.c
+++ b/ptrace.c
@@ -50,7 +50,7 @@ int seize_task(pid_t pid, pid_t ppid)
{
siginfo_t si;
int status;
- int ret, ret2, ptrace_errno;
+ int ret, ret2, ptrace_errno, wait_errno = 0;
struct proc_status_creds cr;
ret = ptrace(PTRACE_SEIZE, pid, NULL, 0);
@@ -81,7 +81,10 @@ int seize_task(pid_t pid, pid_t ppid)
*/
try_again:
- ret = wait4(pid, &status, __WALL, NULL);
+ if (!ret) {
+ ret = wait4(pid, &status, __WALL, NULL);
+ wait_errno = errno;
+ }
ret2 = parse_pid_status(pid, &cr);
if (ret2)
@@ -97,8 +100,8 @@ try_again:
if (pid == getpid())
pr_err("The criu itself is within dumped tree.\n");
else
- pr_err("Unseizable non-zombie %d found, state %c, err %d/%d\n",
- pid, cr.state, ret, ptrace_errno);
+ pr_err("Unseizable non-zombie %d found, state %c, err %d/%d/%d\n",
+ pid, cr.state, ret, ptrace_errno, wait_errno);
return -1;
}
@@ -135,6 +138,7 @@ try_again:
goto err;
}
+ ret = 0;
goto try_again;
}
--
1.9.3
More information about the CRIU
mailing list