diff options
| author | l0stman <endian.sign@gmail.com> | 2020-11-10 08:31:16 +0300 | 
|---|---|---|
| committer | Frans Kaashoek <kaashoek@mit.edu> | 2021-08-31 14:20:32 -0400 | 
| commit | 91951429599eb21130432d1802f7bd1b1b7cbd61 (patch) | |
| tree | 542715d832e6e3ded14e40f1f250152414ece374 /kernel | |
| parent | f55def8a64f5b5faa7373ba5e35c318cc4ea666f (diff) | |
| download | xv6-labs-91951429599eb21130432d1802f7bd1b1b7cbd61.tar.gz xv6-labs-91951429599eb21130432d1802f7bd1b1b7cbd61.tar.bz2 xv6-labs-91951429599eb21130432d1802f7bd1b1b7cbd61.zip | |
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.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/vm.c | 5 | 
1 files changed, 4 insertions, 1 deletions
| 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; | 
