um: Fix wait_stub_done() error handling
If we die within a stub handler we only way to reliable kill the (obviously) dying uml guest process is killing it's host twin on the host side. Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
Родитель
dee20035b4
Коммит
0974a9cadc
|
@ -54,7 +54,7 @@ static int ptrace_dump_regs(int pid)
|
|||
|
||||
void wait_stub_done(int pid)
|
||||
{
|
||||
int n, status, err;
|
||||
int n, status, err, bad_stop = 0;
|
||||
|
||||
while (1) {
|
||||
CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED | __WALL));
|
||||
|
@ -74,6 +74,8 @@ void wait_stub_done(int pid)
|
|||
|
||||
if (((1 << WSTOPSIG(status)) & STUB_DONE_MASK) != 0)
|
||||
return;
|
||||
else
|
||||
bad_stop = 1;
|
||||
|
||||
bad_wait:
|
||||
err = ptrace_dump_regs(pid);
|
||||
|
@ -83,7 +85,10 @@ bad_wait:
|
|||
printk(UM_KERN_ERR "wait_stub_done : failed to wait for SIGTRAP, "
|
||||
"pid = %d, n = %d, errno = %d, status = 0x%x\n", pid, n, errno,
|
||||
status);
|
||||
fatal_sigsegv();
|
||||
if (bad_stop)
|
||||
kill(pid, SIGKILL);
|
||||
else
|
||||
fatal_sigsegv();
|
||||
}
|
||||
|
||||
extern unsigned long current_stub_stack(void);
|
||||
|
|
Загрузка…
Ссылка в новой задаче