Index: uvm_user.c =================================================================== RCS file: /cvsroot/src/sys/uvm/uvm_user.c,v retrieving revision 1.14 diff -p -u -r1.14 uvm_user.c --- uvm_user.c 2 Feb 2011 15:13:34 -0000 1.14 +++ uvm_user.c 12 Feb 2019 10:04:12 -0000 @@ -47,9 +47,17 @@ __KERNEL_RCSID(0, "$NetBSD: uvm_user.c,v void uvm_deallocate(struct vm_map *map, vaddr_t start, vsize_t size) { + vaddr_t end = round_page(start + size); if (size == 0) return; - uvm_unmap(map, trunc_page(start), round_page(start + size)); + /* + * If end ends up less than start, or both start and end are + * zero, there was likely an overflow. Saturate instead. + */ + if (end < start || (end == start && end == 0)) + end = (vaddr_t)-1; + + uvm_unmap(map, trunc_page(start), end); }