aboutsummaryrefslogtreecommitdiff
path: root/src/vmem.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-10-30 13:34:18 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2024-11-01 10:27:36 +0200
commitf139fff6ae7063c1965fa3085bb2585d7d838d72 (patch)
tree7ee9f7c6a1ee09dba93c086cd66861474b821c97 /src/vmem.c
parentb576c1d477bf476f277d32ecf60c312e4a97490d (diff)
downloadkmi-f139fff6ae7063c1965fa3085bb2585d7d838d72.tar.gz
kmi-f139fff6ae7063c1965fa3085bb2585d7d838d72.zip
rpc actually marks and unmarks stack regions
+ Processes won't be able to read previous stack frames etc
Diffstat (limited to 'src/vmem.c')
-rw-r--r--src/vmem.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vmem.c b/src/vmem.c
index 0404202..8c23d4f 100644
--- a/src/vmem.c
+++ b/src/vmem.c
@@ -427,9 +427,17 @@ vmflags_t sanitize_uvflags(vmflags_t flags)
void handle_pagefault(vm_t addr)
{
+ info("page fault at %lx\n", addr);
struct tcb *t = cur_tcb();
- struct tcb *p = get_cproc(t);
+ if (in_rpc_stack(t, addr)) {
+ vm_t aligned = align_down(addr, BASE_PAGE_SIZE);
+ grow_rpc(t, aligned);
+ flush_tlb_all();
+ return;
+ }
+
+ struct tcb *p = get_cproc(t);
size_t ref = __page(addr);
struct mem_region *m = find_closest_used_region(&p->uvmem.region, addr);