From 7bb961dfd808df26b9245c999b8cb4e897439019 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 28 Nov 2021 11:09:38 +0100 Subject: Fix rejecting the mapping of some pages The memmmap method may reject some offsets (because it falls in non-device ranges), so device_map_page has to notice this and report the error. device_pager_data_request then has to notice as well and report. --- vm/vm_object.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'vm/vm_object.c') diff --git a/vm/vm_object.c b/vm/vm_object.c index bbc1d6e2..9e5ae859 100644 --- a/vm/vm_object.c +++ b/vm/vm_object.c @@ -2816,7 +2816,7 @@ ipc_port_t vm_object_name( * The mapping function and its private data are used to obtain the * physical addresses for each page to be mapped. */ -void +kern_return_t vm_object_page_map( vm_object_t object, vm_offset_t offset, @@ -2835,6 +2835,8 @@ vm_object_page_map( for (i = 0; i < num_pages; i++, offset += PAGE_SIZE) { addr = (*map_fn)(map_fn_data, offset); + if (addr == vm_page_fictitious_addr) + return KERN_NO_ACCESS; while ((m = vm_page_grab_fictitious()) == VM_PAGE_NULL) vm_page_more_fictitious(); @@ -2857,6 +2859,7 @@ vm_object_page_map( PAGE_WAKEUP_DONE(m); vm_object_unlock(object); } + return KERN_SUCCESS; } -- cgit v1.2.3