mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 02:14:37 +00:00
x86/kdat: Check PTRACE_TRACEME return value
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@arista.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
parent
b24735429b
commit
ce437d3dc5
1 changed files with 13 additions and 4 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue