From 91951429599eb21130432d1802f7bd1b1b7cbd61 Mon Sep 17 00:00:00 2001 From: l0stman Date: Tue, 10 Nov 2020 08:31:16 +0300 Subject: [PATCH] Assert that the size in mappages() is always positive If va % PGSIZE == 0 and size == 0, we have last < a at the start of the loop so we might never terminate. That being said, this particular case couldn't be triggered for now. --- kernel/vm.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/vm.c b/kernel/vm.c index b47f111..d5a12a0 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -140,13 +140,16 @@ mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm) uint64 a, last; pte_t *pte; + if(size == 0) + panic("mappages: size"); + a = PGROUNDDOWN(va); last = PGROUNDDOWN(va + size - 1); for(;;){ if((pte = walk(pagetable, a, 1)) == 0) return -1; if(*pte & PTE_V) - panic("remap"); + panic("mappages: remap"); *pte = PA2PTE(pa) | perm | PTE_V; if(a == last) break;