HomeFreeBSD

vm_phys: improve robustness of fictitious ranges

Description

vm_phys: improve robustness of fictitious ranges

With the current implementation of managed fictitious ranges when
also using VM_PHYSSEG_DENSE, a user could try to register a
fictitious range that starts inside of vm_page_array, but then
overrruns it (because the end of the fictitious range is greater than
vm_page_array_size + first_page). This would result in PHYS_TO_VM_PAGE
returning unallocated pages from past the end of vm_page_array. The
same could happen if a user tried to register a segment that starts
outside of vm_page_array but ends inside of it.

In order to fix this, allow vm_phys_fictitious_{reg/unreg}_range to
use a set of pages from vm_page_array, and allocate the rest.

Sponsored by: Citrix Systems R&D
Reviewed by: kib, alc

vm/vm_phys.c:

  • Allow registering/unregistering fictitious ranges that overrun vm_page_array.

Details

Provenance
roygerAuthored on Aug 5 2014, 10:29 AM
Parents
rGdc26b3369f16: Return USB_ERR_INVAL if the eject method is not known.
Branches
Unknown
Tags
Unknown