diff options
author | l0stman <[email protected]> | 2020-11-10 08:31:16 +0300 |
---|---|---|
committer | Frans Kaashoek <[email protected]> | 2021-08-31 14:20:32 -0400 |
commit | 91951429599eb21130432d1802f7bd1b1b7cbd61 (patch) | |
tree | 542715d832e6e3ded14e40f1f250152414ece374 /kernel/vm.c | |
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/vm.c')
-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; |