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

Re: [Lost] [Patch] kernel: Kaputten Stackpointer erkennen



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.