diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c --- a/sys/compat/linuxkpi/common/src/linux_compat.c +++ b/sys/compat/linuxkpi/common/src/linux_compat.c @@ -560,6 +560,8 @@ */ *first = vmap->vm_pfn_first; *last = *first + vmap->vm_pfn_count - 1; + MPASS(pidx >= *first); + MPASS(pidx <= *last); err = VM_PAGER_OK; break; default: diff --git a/sys/compat/linuxkpi/common/src/linux_page.c b/sys/compat/linuxkpi/common/src/linux_page.c --- a/sys/compat/linuxkpi/common/src/linux_page.c +++ b/sys/compat/linuxkpi/common/src/linux_page.c @@ -515,12 +515,15 @@ vm_page_t page; vm_pindex_t pindex; + if (addr < vma->vm_start || addr >= vma->vm_end) + return (VM_FAULT_SIGBUS); + VM_OBJECT_ASSERT_WLOCKED(vm_obj); vm_page_iter_init(&pages, vm_obj); pindex = OFF_TO_IDX(addr - vma->vm_start); if (vma->vm_pfn_count == 0) vma->vm_pfn_first = pindex; - MPASS(pindex <= OFF_TO_IDX(vma->vm_end)); + MPASS(pindex < OFF_TO_IDX(vma->vm_end)); retry: page = vm_page_grab_iter(vm_obj, pindex, VM_ALLOC_NOCREAT, &pages);