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

[tyndur-devel] [PATCH] kernel: Stackoverflows besser erkennen



* kernel: Ein Page Fault verlangt eine Vergroesserung des Stacks, wenn
  esp und cr2 maximal zwei Pages voneinander entfernt sind
---
 src/kernel/src/intr.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/src/kernel/src/intr.c b/src/kernel/src/intr.c
index 5baaefc..65e7b7c 100644
--- a/src/kernel/src/intr.c
+++ b/src/kernel/src/intr.c
@@ -414,6 +414,8 @@ void handle_exception(dword* esp)
     struct int_stack_frame * isf = *((struct int_stack_frame **)esp);
 
     dword cr2;
+    intptr_t diff;
+
     switch(isf->interrupt_number)
     {
         case 13:
@@ -427,9 +429,10 @@ void handle_exception(dword* esp)
 
         case 14:
             cr2 = read_cr2();
+            diff = (cr2 >> PAGE_SHIFT) - (isf->esp >> PAGE_SHIFT);
             // Ueberprüfen ob der Pagefault durch einen Stackoverflow
             // hervorgerufen wurde
-            if ((cr2 <= isf->esp + 0x800) && (cr2 >= isf->esp - 0x20)
+            if ((diff >= -2) && (diff <= 2)
                 && (current_task != NULL)
                 && ((void*)cr2 >= current_task->user_stack_bottom - 0x1000000))
             {
-- 
1.5.6.5