diff options
| author | Saarett <Saarett@users.noreply.github.com> | 2017-02-05 12:44:56 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-05 12:44:56 +0200 | 
| commit | 03b30863279b111fb6b9f154a9bdaa831114adfb (patch) | |
| tree | 75cf8472cb5461908c7d92ced09d42f9827008fb | |
| parent | 59cdd6c63b89395d64ec9550181af5ed569b8466 (diff) | |
| download | xv6-labs-03b30863279b111fb6b9f154a9bdaa831114adfb.tar.gz xv6-labs-03b30863279b111fb6b9f154a9bdaa831114adfb.tar.bz2 xv6-labs-03b30863279b111fb6b9f154a9bdaa831114adfb.zip | |
Free pgdir in setupkvm in case of mappages failure
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.
| -rw-r--r-- | vm.c | 4 | 
1 files changed, 3 insertions, 1 deletions
| @@ -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;  } | 
