diff options
| author | Austin Clements <amdragon@mit.edu> | 2010-09-01 00:27:12 -0400 | 
|---|---|---|
| committer | Austin Clements <amdragon@mit.edu> | 2010-09-01 00:27:12 -0400 | 
| commit | ba04b3e70e4f1916c777d62de53088d96b09579f (patch) | |
| tree | acb35e9f0e9740956b57944566aff94c2b467bf6 | |
| parent | dd645ef11911596d73d128c1da53579678c56aee (diff) | |
| download | xv6-labs-ba04b3e70e4f1916c777d62de53088d96b09579f.tar.gz xv6-labs-ba04b3e70e4f1916c777d62de53088d96b09579f.tar.bz2 xv6-labs-ba04b3e70e4f1916c777d62de53088d96b09579f.zip | |
Fix similar leak in copyuvm
| -rw-r--r-- | vm.c | 8 | 
1 files changed, 6 insertions, 2 deletions
| @@ -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 | 
