From 91951429599eb21130432d1802f7bd1b1b7cbd61 Mon Sep 17 00:00:00 2001
From: l0stman <endian.sign@gmail.com>
Date: Tue, 10 Nov 2020 08:31:16 +0300
Subject: 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;
-- 
cgit v1.2.3