diff options
author | kib <kib@FreeBSD.org> | 2013-12-17 09:21:56 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2013-12-17 09:21:56 +0000 |
commit | 758e3a99342f38f2affc2019fd5b16adf0898255 (patch) | |
tree | 13e2b4c9dfb92cab18802b8ce91cef46c15fb35c /sys/vm/vm_fault.c | |
parent | e5df7f0316ab4d319ec41a8c92c42cb3e50a2543 (diff) | |
download | FreeBSD-src-758e3a99342f38f2affc2019fd5b16adf0898255.zip FreeBSD-src-758e3a99342f38f2affc2019fd5b16adf0898255.tar.gz |
MFC r258039:
Avoid overflow for the page counts.
MFC r258365:
Revert back to use int for the page counts.
Rearrange the checks to correctly handle overflowing address arithmetic.
Diffstat (limited to 'sys/vm/vm_fault.c')
-rw-r--r-- | sys/vm/vm_fault.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 26ad9f3..4f4015d 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -1079,7 +1079,7 @@ vm_fault_quick_hold_pages(vm_map_t map, vm_offset_t addr, vm_size_t len, if (len == 0) return (0); - end = round_page(addr + len); + end = round_page(addr + len); addr = trunc_page(addr); /* @@ -1088,9 +1088,9 @@ vm_fault_quick_hold_pages(vm_map_t map, vm_offset_t addr, vm_size_t len, if (addr < vm_map_min(map) || addr > end || end > vm_map_max(map)) return (-1); - count = howmany(end - addr, PAGE_SIZE); - if (count > max_count) + if (atop(end - addr) > max_count) panic("vm_fault_quick_hold_pages: count > max_count"); + count = atop(end - addr); /* * Most likely, the physical pages are resident in the pmap, so it is |