aboutsummaryrefslogtreecommitdiff
path: root/kernel/vm/mmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/vm/mmap.c')
-rw-r--r--kernel/vm/mmap.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/kernel/vm/mmap.c b/kernel/vm/mmap.c
index 78aa3b5..ce932de 100644
--- a/kernel/vm/mmap.c
+++ b/kernel/vm/mmap.c
@@ -161,7 +161,6 @@ long do_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t off,
VMMAP_DIR_HILO,
&vma
);
-
// check if vmmap_map() failed
if (err < 0)
{
@@ -213,7 +212,7 @@ long do_munmap(void *addr, size_t len)
}
// Check if len is in bounds
- if (len > USER_MEM_HIGH)
+ if (len > USER_MEM_HIGH || len == 0)
{
return -EINVAL;
}
@@ -224,17 +223,13 @@ long do_munmap(void *addr, size_t len)
return -EINVAL;
}
- // Check if len is 0
- if (len == 0)
- {
- return -EINVAL;
- }
-
// Remove the mapping
+ size_t start = ADDR_TO_PN(addr);
+ size_t end = ADDR_TO_PN(PAGE_ALIGN_UP((uintptr_t)addr + len));
long ret = vmmap_remove(
curproc->p_vmmap,
- ADDR_TO_PN(addr),
- ADDR_TO_PN(PAGE_ALIGN_UP((uintptr_t)addr + len))
+ start,
+ end - start
);
return ret;
} \ No newline at end of file