From 74c1eba516fdb0ec1a17b16be7e76613ccba92bf Mon Sep 17 00:00:00 2001 From: asselism Date: Mon, 17 Oct 2022 16:02:54 -0400 Subject: Made va and size page aligned in mappages --- kernel/vm.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'kernel') diff --git a/kernel/vm.c b/kernel/vm.c index 486945e..5c31e87 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -136,8 +136,9 @@ kvmmap(pagetable_t kpgtbl, uint64 va, uint64 pa, uint64 sz, int perm) } // Create PTEs for virtual addresses starting at va that refer to -// physical addresses starting at pa. va and size might not -// be page-aligned. Returns 0 on success, -1 if walk() couldn't +// physical addresses starting at pa. +// va and size MUST be page-aligned. +// Returns 0 on success, -1 if walk() couldn't // allocate a needed page-table page. int mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm) @@ -145,11 +146,17 @@ mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm) uint64 a, last; pte_t *pte; + if((va % PGSIZE) != 0) + panic("mappages: va not aligned"); + + if((size % PGSIZE) != 0) + panic("mappages: size not aligned"); + if(size == 0) panic("mappages: size"); - a = PGROUNDDOWN(va); - last = PGROUNDDOWN(va + size - 1); + a = va; + last = va + size - PGSIZE; for(;;){ if((pte = walk(pagetable, a, 1)) == 0) return -1; -- cgit v1.2.3