Browse Source

Hang if we GPF in ring 0.

Andreas Kling 6 năm trước cách đây
mục cha
commit
1a801e5737
2 tập tin đã thay đổi với 7 bổ sung0 xóa
  1. 2 0
      Kernel/Task.h
  2. 5 0
      Kernel/i386.cpp

+ 2 - 0
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();

+ 5 - 0
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");