[CRIU] [PATCH] x86/kdat: Check PTRACE_TRACEME return value
Dmitry Safonov
dima at arista.com
Tue Feb 27 16:42:55 MSK 2018
Coverity has informed:
*** CID 188251: Error handling issues (CHECKED_RETURN)
/criu/arch/x86/crtools.c: 196 in kdat_x86_has_ptrace_fpu_xsave_bug_child()
190 return 0;
191 }
192 #endif
193
194 static int kdat_x86_has_ptrace_fpu_xsave_bug_child(void *arg)
195 {
>>> CID 188251: Error handling issues (CHECKED_RETURN)
>>> Calling "ptrace" without checking return value (as is done elsewhere 46 out of 51 times).
196 ptrace(PTRACE_TRACEME, 0, 0, 0);
197 kill(getpid(), SIGSTOP);
198 pr_err("Continue after SIGSTOP.. Urr what?\n");
199 _exit(1);
200 }
201
Also added checks for kill() and waitpid().
Signed-off-by: Dmitry Safonov <dima at arista.com>
---
criu/arch/x86/kerndat.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/criu/arch/x86/kerndat.c b/criu/arch/x86/kerndat.c
index a67017d3456e..006196829c89 100644
--- a/criu/arch/x86/kerndat.c
+++ b/criu/arch/x86/kerndat.c
@@ -178,8 +178,14 @@ int kdat_compatible_cr(void)
static int kdat_x86_has_ptrace_fpu_xsave_bug_child(void *arg)
{
- ptrace(PTRACE_TRACEME, 0, 0, 0);
- kill(getpid(), SIGSTOP);
+ if (ptrace(PTRACE_TRACEME, 0, 0, 0)) {
+ pr_perror("%d: ptrace(PTRACE_TRACEME) failed", getpid());
+ _exit(1);
+ }
+
+ if (kill(getpid(), SIGSTOP))
+ pr_perror("%d: failed to kill myself", getpid());
+
pr_err("Continue after SIGSTOP.. Urr what?\n");
_exit(1);
}
@@ -243,7 +249,10 @@ int kdat_x86_has_ptrace_fpu_xsave_bug(void)
ret = !xsave.i387.mxcsr;
out_kill:
- kill(child, SIGKILL);
- waitpid(child, &stat, 0);
+ if (kill(child, SIGKILL))
+ pr_perror("Failed to kill my own child");
+ if (waitpid(child, &stat, 0) < 0)
+ pr_perror("Failed wait for a dead child");
+
return ret;
}
--
2.13.6
More information about the CRIU
mailing list