diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2014-10-28 00:50:07 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2014-10-28 00:50:07 -0700 |
commit | 514adef4868460944738f39734f282dc14e4d744 (patch) | |
tree | 6d19a7b5f321dd946941930da732f3cad480ee1a /pk/vm.c | |
parent | 6d45e8de32cce54e3cc6688545e58da5a9aaead7 (diff) | |
download | pk-514adef4868460944738f39734f282dc14e4d744.zip pk-514adef4868460944738f39734f282dc14e4d744.tar.gz pk-514adef4868460944738f39734f282dc14e4d744.tar.bz2 |
don't forget to release locks!
Diffstat (limited to 'pk/vm.c')
-rw-r--r-- | pk/vm.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -356,21 +356,25 @@ uintptr_t do_mprotect(uintptr_t addr, size_t length, int prot) for (uintptr_t a = addr; a < addr + length; a += RISCV_PGSIZE) { pte_t* pte = __walk(a); - if (pte == 0 || *pte == 0) - return -ENOMEM; + if (pte == 0 || *pte == 0) { + res = -ENOMEM; + break; + } if(!(*pte & PTE_V)){ vmr_t* v = (vmr_t*)*pte; if((v->prot ^ prot) & ~v->prot){ //TODO:look at file to find perms - return -EACCES; + res = -EACCES; + break; } v->prot = prot; }else{ pte_t perms = pte_create(0, 0, prot); if ((*pte & perms) != perms){ //TODO:look at file to find perms - return -EACCES; + res = -EACCES; + break; } pte_t permset = (*pte & ~(PTE_UR | PTE_UW | PTE_UX)) | perms; *pte = permset; |