From 9f07fe52a456e22874fa8f79fb6b2aefd6d4c4fb Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 3 Oct 2024 12:07:35 -0400 Subject: [PATCH] kernel/vm: Don't commit memory for non-private clones in vm_clone_area. The source area should already have dealt with commitments (or not.) Fixes cloning of physical map areas and the like (#19143.) --- src/system/kernel/vm/vm.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/system/kernel/vm/vm.cpp b/src/system/kernel/vm/vm.cpp index a55ffed6ef..b0264339bf 100644 --- a/src/system/kernel/vm/vm.cpp +++ b/src/system/kernel/vm/vm.cpp @@ -2480,13 +2480,17 @@ vm_clone_area(team_id team, const char* name, void** address, } else if (sourceArea->cache_type == CACHE_TYPE_NULL) { status = B_NOT_ALLOWED; } else { + uint32 flags = 0; + if (mapping != REGION_PRIVATE_MAP) + flags |= CREATE_AREA_DONT_COMMIT_MEMORY; + virtual_address_restrictions addressRestrictions = {}; addressRestrictions.address = *address; addressRestrictions.address_specification = addressSpec; status = map_backing_store(targetAddressSpace, cache, sourceArea->cache_offset, name, sourceArea->Size(), sourceArea->wiring, protection, sourceArea->protection_max, - mapping, 0, &addressRestrictions, + mapping, flags, &addressRestrictions, kernel, &newArea, address); } if (status == B_OK && mapping != REGION_PRIVATE_MAP) {