From 899cc02660232092209a5db57b326ab7b49813dd Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Fri, 12 Aug 2022 13:22:10 -0400 Subject: Experiment with being more precise setting permissions for user pages. Growing adds R|W pages (without X). Exec() marks the stack only R|W. Probably could setup permissions for text and data better if we call ld with --no-omagic instead of -N. --- kernel/vm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'kernel/vm.c') diff --git a/kernel/vm.c b/kernel/vm.c index 3c6f295..284b72d 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -218,7 +218,7 @@ uvmfirst(pagetable_t pagetable, uchar *src, uint sz) // Allocate PTEs and physical memory to grow process from oldsz to // newsz, which need not be page aligned. Returns new size or 0 on error. uint64 -uvmalloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz) +uvmalloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz, int xperm) { char *mem; uint64 a; @@ -234,7 +234,7 @@ uvmalloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz) return 0; } memset(mem, 0, PGSIZE); - if(mappages(pagetable, a, PGSIZE, (uint64)mem, PTE_W|PTE_X|PTE_R|PTE_U) != 0){ + if(mappages(pagetable, a, PGSIZE, (uint64)mem, PTE_R|PTE_U|xperm) != 0){ kfree(mem); uvmdealloc(pagetable, a, oldsz); return 0; -- cgit v1.2.3