aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2021-04-04 00:08:15 +0200
committerMarvin Borner2021-04-04 00:08:15 +0200
commit9127d8e4d09207d5c9d98024ca6610310a7273ad (patch)
treee911b9906578d0d3a90a6f611f271c7241876504
parent0162d9cafc2c9b14fe6f319d1fbca74b26bd0b3d (diff)
Added readonly stack page boundary
-rw-r--r--kernel/features/load.c8
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;