[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;