From 06d50155ac0bd079bfca0f5728346d8beeb205f2 Mon Sep 17 00:00:00 2001 From: sotech117 Date: Tue, 14 May 2024 03:19:46 +0000 Subject: weenix fixes --- kernel/api/access.c | 42 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) (limited to 'kernel/api/access.c') diff --git a/kernel/api/access.c b/kernel/api/access.c index 9941971..aa8e83c 100644 --- a/kernel/api/access.c +++ b/kernel/api/access.c @@ -116,30 +116,11 @@ long user_vecdup(argvec_t *uvec, char ***kvecp) */ long addr_perm(proc_t *p, const void *vaddr, int perm) { - // NOT_YET_IMPLEMENTED("VM: addr_perm"); + // NOT_YET_IMPLEMENTED("vm:: addr_perm"); - // // loop through the vmareas in the process's vmmap - // vmarea_t *vma = vmmap_lookup(p->p_vmmap, ADDR_TO_PN(vaddr)); - - // // if the vma doesn't exist, return 0 - // if (!vma) - // { - // return 0; - // } - - // return !!(perm & vma->vma_prot); - - // TODO: FIX MEEE - - vmarea_t* area = vmmap_lookup(p->p_vmmap, ADDR_TO_PN(vaddr)); - if (!area) { - return 0; - } - if (perm & area->vma_prot) { - return 1; - } else { - return 0; - } + // loop through the vmareas in the process's vmmap + vmarea_t *vma = vmmap_lookup(p->p_vmmap, ADDR_TO_PN(vaddr)); + return vma && !!(perm & vma->vma_prot); } /* @@ -153,20 +134,17 @@ long addr_perm(proc_t *p, const void *vaddr, int perm) */ long range_perm(proc_t *p, const void *vaddr, size_t len, int perm) { - // NOT_YET_IMPLEMENTED("VM: range_perm"); - // loop through the page numbers in the range - size_t vfn = ADDR_TO_PN(vaddr); - size_t end_vfn = ADDR_TO_PN((uintptr_t)vaddr + len); - for (size_t i = vfn; i < end_vfn; i++) + for ( + size_t vfn = ADDR_TO_PN(vaddr); + vfn < ADDR_TO_PN(PAGE_ALIGN_UP((uintptr_t)vaddr + len)); + vfn++ + ) { - // check the permissions for each page - if (!addr_perm(p, PN_TO_ADDR(i), perm)) + if (!addr_perm(p, PN_TO_ADDR(vfn), perm)) { return 0; } } - - // return 1 if all pages have the correct permissions return 1; } -- cgit v1.2.3-70-g09d2