]> Devi Nivas Git - cs3210-lab0.git/commitdiff
Free pgdir in setupkvm in case of mappages failure
authorSaarett <Saarett@users.noreply.github.com>
Sun, 5 Feb 2017 10:44:56 +0000 (12:44 +0200)
committerGitHub <noreply@github.com>
Sun, 5 Feb 2017 10:44:56 +0000 (12:44 +0200)
There is a potential memory leak when mappages() fails inside setupkvm().
A call to freevm() is added in this case so as to reclaim the lost mapping pages.

vm.c

diff --git a/vm.c b/vm.c
index 9db8b67826e22f56cbf9bd2823806c283323a08b..39642f4459b1044869ae790b52162ec22455db7b 100644 (file)
--- a/vm.c
+++ b/vm.c
@@ -137,8 +137,10 @@ setupkvm(void)
     panic("PHYSTOP too high");
   for(k = kmap; k < &kmap[NELEM(kmap)]; k++)
     if(mappages(pgdir, k->virt, k->phys_end - k->phys_start,
-                (uint)k->phys_start, k->perm) < 0)
+                (uint)k->phys_start, k->perm) < 0) {
+      freevm(pgdir);
       return 0;
+    }
   return pgdir;
 }