From 54113f77b573f8b06011500a2fd95346c046e921 Mon Sep 17 00:00:00 2001 From: Chris Turner Date: Fri, 9 Mar 2012 20:34:46 +0000 Subject: [PATCH] kernel: add missing holds/drops to vm_fault_copy_entry Add missing holds/drops to vm_fault_copy_entry that were triggering assertions in vm_page_alloc/vm_page_lookup when when a process holding locked memory is forked. Fixes: https://bugs.dragonflybsd.org/issues/2320 Reviewed-by: vsrinavas X-Nahmean-Status: word --- sys/vm/vm_fault.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 05dd8f7752..91f80c7d8d 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -1940,9 +1940,11 @@ vm_fault_copy_entry(vm_map_t dst_map, vm_map_t src_map, * Allocate a page in the destination object */ do { + vm_object_hold(dst_object); dst_m = vm_page_alloc(dst_object, OFF_TO_IDX(dst_offset), VM_ALLOC_NORMAL); + vm_object_drop(dst_object); if (dst_m == NULL) { vm_wait(0); } @@ -1953,8 +1955,11 @@ vm_fault_copy_entry(vm_map_t dst_map, vm_map_t src_map, * (Because the source is wired down, the page will be in * memory.) */ + vm_object_hold(src_object); src_m = vm_page_lookup(src_object, OFF_TO_IDX(dst_offset + src_offset)); + vm_object_drop(src_object); + if (src_m == NULL) panic("vm_fault_copy_wired: page missing"); -- 2.41.0