x86 set_signal: panic if interrupt came from kernel
This makes debugging errors e.g. FPE from kernel much easier, we really shouldn't be taking a user level coredump blaming user in that case anyway
This commit is contained in:
@@ -1334,15 +1334,19 @@ set_signal(int sig, void *regs0, siginfo_t *info)
|
|||||||
struct x86_user_context *regs = regs0;
|
struct x86_user_context *regs = regs0;
|
||||||
struct thread *thread = cpu_local_var(current);
|
struct thread *thread = cpu_local_var(current);
|
||||||
|
|
||||||
if(thread == NULL || thread->proc->pid == 0)
|
if (thread == NULL || thread->proc->pid == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if((__sigmask(sig) & thread->sigmask.__val[0]) ||
|
if (!interrupt_from_user(regs)) {
|
||||||
(regs->gpr.rsp & 0x8000000000000000)){
|
ihk_mc_debug_show_interrupt_context(regs);
|
||||||
|
panic("panic: kernel mode signal");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((__sigmask(sig) & thread->sigmask.__val[0])) {
|
||||||
coredump(thread, regs0);
|
coredump(thread, regs0);
|
||||||
terminate(0, sig | 0x80);
|
terminate(0, sig | 0x80);
|
||||||
}
|
}
|
||||||
do_kill(thread, thread->proc->pid, thread->tid, sig, info, 0);
|
do_kill(thread, thread->proc->pid, thread->tid, sig, info, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSCALL_DECLARE(mmap)
|
SYSCALL_DECLARE(mmap)
|
||||||
|
|||||||
Reference in New Issue
Block a user