diff options
author | Marvin Borner | 2021-04-04 00:08:15 +0200 |
---|---|---|
committer | Marvin Borner | 2021-04-04 00:08:15 +0200 |
commit | 9127d8e4d09207d5c9d98024ca6610310a7273ad (patch) | |
tree | e911b9906578d0d3a90a6f611f271c7241876504 | |
parent | 0162d9cafc2c9b14fe6f319d1fbca74b26bd0b3d (diff) |
Added readonly stack page boundary
-rw-r--r-- | kernel/features/load.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/features/load.c b/kernel/features/load.c index de48be4..2b82a44 100644 --- a/kernel/features/load.c +++ b/kernel/features/load.c @@ -143,7 +143,13 @@ res elf_load(const char *path, struct proc *proc) memory_switch_dir(proc->page_dir); stac(); - u32 stack = (u32)memory_alloc(proc->page_dir, PROC_STACK_SIZE, MEMORY_USER | MEMORY_CLEAR); + + // Allocate stack with readonly lower and upper page boundary + u32 stack = PAGE_SIZE + (u32)memory_alloc(proc->page_dir, PROC_STACK_SIZE + 2 * PAGE_SIZE, + MEMORY_USER | MEMORY_CLEAR); + virtual_remap_readonly(proc->page_dir, memory_range(stack - PAGE_SIZE, PAGE_SIZE)); + virtual_remap_readonly(proc->page_dir, memory_range(stack + PROC_STACK_SIZE, PAGE_SIZE)); + proc->regs.ebp = stack + PROC_STACK_SIZE; proc->regs.useresp = stack + PROC_STACK_SIZE; proc->regs.eip = header.entry; |