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 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;
|
||||
}
|
||||
|
||||
PANIC("Page fault in process\n");
|
||||
return r;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user