[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Lost] [Patch] kernel: Kaputten Stackpointer erkennen



! kernel: Bei einem Page Fault wurde davon ausgegangen, dass der Stack 
vergroessert werden muss, wenn cr2 in der Naehe von esp liegt. Das 
beruecksichtigt nicht den Fall, dass esp durch den Userspace kaputtgemacht 
werden kann. Ein Vergleich mit dem kernelinternen user_stack_bottom kann 
diesen Fall erkennen.
Index: trunk/src/kernel/src/intr.c
===================================================================
--- trunk.orig/src/kernel/src/intr.c
+++ trunk/src/kernel/src/intr.c
@@ -431,8 +431,11 @@ void handle_exception(dword* esp)
 
         case 14:
             cr2 = read_cr2();
-            // Ueberprüfen ob der Pagefault durch einen Stackoverflow hervorgerufen wurde
-            if((cr2 <= isf->esp + 0x800) && (cr2 >= isf->esp - 0x20) && (current_task != NULL))
+            // Ueberprüfen ob der Pagefault durch einen Stackoverflow
+            // hervorgerufen wurde
+            if ((cr2 <= isf->esp + 0x800) && (cr2 >= isf->esp - 0x20)
+                && (cr2 >= (uintptr_t)current_task->user_stack_bottom - 0x1000)
+                && (current_task != NULL))
             {
                 increase_user_stack_size(current_task, 1);
                 return;