From 9ccc6751e341b3b81b681d29597c6b0b46fc9cb6 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sun, 2 Nov 2025 00:46:31 +0100 Subject: [PATCH] Use CS register to detect kernel code vs. user code in case of an exception --- kernel/hal/x86_64/intr.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel/hal/x86_64/intr.c b/kernel/hal/x86_64/intr.c index 523af17..998ca76 100644 --- a/kernel/hal/x86_64/intr.c +++ b/kernel/hal/x86_64/intr.c @@ -217,12 +217,14 @@ void intr_handleintr(IntrStackFrame *frame) { kprintf("ERROR %s, 0x%lX\n", exceptions[frame->trapnum], frame->errnum); intr_dumpframe(frame); 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); proc_killself(); proc_sched((void *)frame); + } else { + kprintf("Kernel error :(\n"); + hal_hang(); } - hal_hang(); } else if (frame->trapnum >= 32 && frame->trapnum <= 47) { switch (frame->trapnum) { case INTR_IRQBASE+0: