summaryrefslogtreecommitdiff
path: root/kernel/memory/paging.c
diff options
context:
space:
mode:
authorIan McFarlane <i.mcfarlane2002@gmail.com>2025-04-25 12:15:41 -0400
committerIan McFarlane <i.mcfarlane2002@gmail.com>2025-04-25 12:15:41 -0400
commitf88e7fada2f9998063d1816d4375ee7c8735f57f (patch)
tree8cb3a140a22a416368201afe1b0f67f8555f750e /kernel/memory/paging.c
parentresolve format conflict (diff)
downloadcomus-f88e7fada2f9998063d1816d4375ee7c8735f57f.tar.gz
comus-f88e7fada2f9998063d1816d4375ee7c8735f57f.tar.bz2
comus-f88e7fada2f9998063d1816d4375ee7c8735f57f.zip
fixed segfault caused by mapping the wrong virtual address in mem_alloc_pages_at
Diffstat (limited to '')
-rw-r--r--kernel/memory/paging.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/memory/paging.c b/kernel/memory/paging.c
index b23e39b..5a0b285 100644
--- a/kernel/memory/paging.c
+++ b/kernel/memory/paging.c
@@ -828,11 +828,12 @@ void *mem_alloc_pages_at(mem_ctx_t ctx, size_t count, void *virt,
kunmapaddr(pageone);
}
+ // index into virtual page array at index [count - pages_needed]
+ void *vaddr = ((uint8_t *)virt) + ((count - pages_needed) * PAGE_SIZE);
+
assert(pages_needed >= phys_pages.num_pages, "overflow");
pages_needed -= phys_pages.num_pages;
- // index into virtual page array at index [count - pages_needed]
- void *vaddr = ((uint8_t *)virt) + ((count - pages_needed) * PAGE_SIZE);
if (map_pages((volatile struct pml4 *)ctx->pml4, vaddr,
phys_pages.pagestart, flags, phys_pages.num_pages)) {
goto mem_alloc_pages_at_fail;