Am Sonntag, 24. August 2008 13.06:17 schrieb Kevin Wolf: > ! 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)) Kommt dieser vergliech hier nicht etwas zu spät? > { > increase_user_stack_size(current_task, 1); > return; Sonst siehts gut aus.
Attachment:
signature.asc
Description: This is a digitally signed message part.