Handle pagefaults caused by running of the stack
This commit is contained in:
parent
28c82567a0
commit
4c4e7136cc
@ -34,7 +34,22 @@ registers *proc_pagefault(registers *r)
|
|||||||
PANIC("Page fault in kernel\n");
|
PANIC("Page fault in kernel\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
PANIC("Page fault in process\n");
|
uint64_t fault_addr = read_cr2();
|
||||||
|
uint64_t stack = PROCESS()->stack;
|
||||||
|
if(fault_addr + PAGE_SIZE >= stack)
|
||||||
|
{
|
||||||
|
// Page fault happened just below stack. Add another page to it.
|
||||||
|
// Unless it's about to run into brk.
|
||||||
|
if(stack - PAGE_SIZE <= PROCESS()->brk)
|
||||||
|
PANIC("Stack overflow in process %d\n", PROCESS()->pid);
|
||||||
|
|
||||||
|
stack -= PAGE_SIZE;
|
||||||
|
vmm_set_page(PROCESS()->P4, stack, pmm_alloc(), PAGE_USER | PAGE_WRITE | PAGE_PRESENT);
|
||||||
|
PROCESS()->stack = stack;
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PANIC("Page fault in process\n");
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user