]> Devi Nivas Git - cs3210-lab1.git/commitdiff
Fix similar leak in copyuvm
authorAustin Clements <amdragon@mit.edu>
Wed, 1 Sep 2010 04:27:12 +0000 (00:27 -0400)
committerAustin Clements <amdragon@mit.edu>
Wed, 1 Sep 2010 04:27:12 +0000 (00:27 -0400)
vm.c

diff --git a/vm.c b/vm.c
index 95eeca8e3fb9096361930b98da7d0d1dd0732cbd..a60c9158c230aec43f10e9667d035a08ca3836f0 100644 (file)
--- a/vm.c
+++ b/vm.c
@@ -313,13 +313,17 @@ copyuvm(pde_t *pgdir, uint sz)
     if(*pte & PTE_P){
       pa = PTE_ADDR(*pte);
       if (!(mem = kalloc()))
-        return 0;
+        goto bad;
       memmove(mem, (char *)pa, PGSIZE);
       if (!mappages(d, (void *)i, PGSIZE, PADDR(mem), PTE_W|PTE_U))
-        return 0;
+        goto bad;
     }
   }
   return d;
+
+bad:
+  freevm(d);
+  return 0;
 }
 
 // Allocate one page table for the machine for the kernel address