Use CS register to detect kernel code vs. user code in case of an exception

This commit is contained in:
2025-11-02 00:46:31 +01:00
parent d947192475
commit 9ccc6751e3

View File

@ -217,12 +217,14 @@ void intr_handleintr(IntrStackFrame *frame) {
kprintf("ERROR %s, 0x%lX\n", exceptions[frame->trapnum], frame->errnum); kprintf("ERROR %s, 0x%lX\n", exceptions[frame->trapnum], frame->errnum);
intr_dumpframe(frame); intr_dumpframe(frame);
backtrace((BackTraceFrame *)frame->regs.rbp); backtrace((BackTraceFrame *)frame->regs.rbp);
if (hal_vmm_current_cr3() != KERNEL_CR3) { if (frame->cs == UCODE) {
kprintf("killed pid %ld %s\n", PROCS.current->pid, PROCS.current->name); kprintf("killed pid %ld %s\n", PROCS.current->pid, PROCS.current->name);
proc_killself(); proc_killself();
proc_sched((void *)frame); proc_sched((void *)frame);
} } else {
kprintf("Kernel error :(\n");
hal_hang(); hal_hang();
}
} else if (frame->trapnum >= 32 && frame->trapnum <= 47) { } else if (frame->trapnum >= 32 && frame->trapnum <= 47) {
switch (frame->trapnum) { switch (frame->trapnum) {
case INTR_IRQBASE+0: case INTR_IRQBASE+0: