For the VM_PHYSSEG_DENSE case, checking the requested range to fall
into the area backed by vm_page_array wrongly compared end with vm_page_array_size. It should be adjusted by first_page index to be correct. Also, the corner and incorrect case of the requested range extending after the end of the vm_page_array was incorrectly handled by allocating the segment. Fix the comparision for the end of range and return EINVAL if the end extends beyond vm_page_array. Discussed with: royger Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
06177e52c9
commit
a17937bdd0
@ -551,7 +551,9 @@ vm_phys_fictitious_reg_range(vm_paddr_t start, vm_paddr_t end,
|
||||
|
||||
#ifdef VM_PHYSSEG_DENSE
|
||||
pi = atop(start);
|
||||
if (pi >= first_page && atop(end) < vm_page_array_size) {
|
||||
if (pi >= first_page && pi < vm_page_array_size + first_page) {
|
||||
if (atop(end) >= vm_page_array_size + first_page)
|
||||
return (EINVAL);
|
||||
fp = &vm_page_array[pi - first_page];
|
||||
malloced = FALSE;
|
||||
} else
|
||||
|
Loading…
Reference in New Issue
Block a user