From 1a801e5737fa8851a367040d67267c53ba01c82c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 18 Oct 2018 00:12:52 +0200 Subject: [PATCH] Hang if we GPF in ring 0. --- Kernel/Task.h | 2 ++ Kernel/i386.cpp | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/Kernel/Task.h b/Kernel/Task.h index 21fad1857f7..7b39f85f8d6 100644 --- a/Kernel/Task.h +++ b/Kernel/Task.h @@ -37,6 +37,8 @@ public: Ring3 = 3, }; + bool isRing0() const { return m_ring == Ring0; } + static Task* fromPID(pid_t); static Task* fromIPCHandle(IPC::Handle); static Task* kernelTask(); diff --git a/Kernel/i386.cpp b/Kernel/i386.cpp index 47f156772a6..6e7368fab08 100644 --- a/Kernel/i386.cpp +++ b/Kernel/i386.cpp @@ -79,6 +79,11 @@ void exception_13_handler() kprintf("eax=%x ebx=%x ecx=%x edx=%x\n", regs.eax, regs.ebx, regs.ecx, regs.edx); kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, regs.esp, regs.esi, regs.edi); + if (current->isRing0()) { + kprintf("Oh shit, we've crashed in ring 0 :(\n"); + HANG; + } + current->setState(Task::Crashing); if (!scheduleNewTask()) { kprintf("Failed to schedule a new task :(\n");