diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-10-30 13:34:18 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-11-01 10:27:36 +0200 |
| commit | f139fff6ae7063c1965fa3085bb2585d7d838d72 (patch) | |
| tree | 7ee9f7c6a1ee09dba93c086cd66861474b821c97 /src/vmem.c | |
| parent | b576c1d477bf476f277d32ecf60c312e4a97490d (diff) | |
| download | kmi-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.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -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); |
