mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
munmap: fix memory leak
This commit is contained in:
@@ -395,6 +395,7 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags,
|
|||||||
if (addr == NULL)
|
if (addr == NULL)
|
||||||
addr = KERNELSPACE_START;
|
addr = KERNELSPACE_START;
|
||||||
|
|
||||||
|
// XXX maps where addr is not page aligned can break
|
||||||
addr = (void *)ROUND_DOWN((uintptr_t)addr, PAGE_SIZE);
|
addr = (void *)ROUND_DOWN((uintptr_t)addr, PAGE_SIZE);
|
||||||
if (flags & VMM_FLAGS_PAGESIZE)
|
if (flags & VMM_FLAGS_PAGESIZE)
|
||||||
size *= PAGE_SIZE;
|
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) {
|
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);
|
addr = (void *)ROUND_DOWN((uintptr_t)addr, PAGE_SIZE);
|
||||||
|
|
||||||
if (flags & VMM_FLAGS_PAGESIZE)
|
if (flags & VMM_FLAGS_PAGESIZE)
|
||||||
size *= PAGE_SIZE;
|
size *= PAGE_SIZE;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ syscallret_t syscall_munmap(context_t *ctx, void *addr, size_t length) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
vmm_unmap(addr, length / PAGE_SIZE, 0);
|
vmm_unmap(addr, length, 0);
|
||||||
|
|
||||||
ret.ret = 0;
|
ret.ret = 0;
|
||||||
ret.errno = 0;
|
ret.errno = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user