From f82716305659433f3fa947da2af609d7e9174890 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 21 Apr 2024 20:16:01 -0300 Subject: [PATCH] munmap: fix memory leak --- kernel-src/mm/vmm.c | 3 +++ kernel-src/sys/syscalls/munmap.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel-src/mm/vmm.c b/kernel-src/mm/vmm.c index afd991f8..bd8918be 100644 --- a/kernel-src/mm/vmm.c +++ b/kernel-src/mm/vmm.c @@ -395,6 +395,7 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags, if (addr == NULL) addr = KERNELSPACE_START; + // XXX maps where addr is not page aligned can break addr = (void *)ROUND_DOWN((uintptr_t)addr, PAGE_SIZE); if (flags & VMM_FLAGS_PAGESIZE) size *= PAGE_SIZE; @@ -482,7 +483,9 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags, } void vmm_unmap(void *addr, size_t size, int flags) { + // XXX maps where addr is not page aligned can break addr = (void *)ROUND_DOWN((uintptr_t)addr, PAGE_SIZE); + if (flags & VMM_FLAGS_PAGESIZE) size *= PAGE_SIZE; else diff --git a/kernel-src/sys/syscalls/munmap.c b/kernel-src/sys/syscalls/munmap.c index 5be65d95..659c29cb 100644 --- a/kernel-src/sys/syscalls/munmap.c +++ b/kernel-src/sys/syscalls/munmap.c @@ -18,7 +18,7 @@ syscallret_t syscall_munmap(context_t *ctx, void *addr, size_t length) { return ret; } - vmm_unmap(addr, length / PAGE_SIZE, 0); + vmm_unmap(addr, length, 0); ret.ret = 0; ret.errno = 0;