From e672ccd940e7bfada03f18190874e974bda2474a Mon Sep 17 00:00:00 2001 From: Marsman1996 Date: Thu, 29 Jan 2026 19:20:40 +0800 Subject: [PATCH] Fix panic in mprotect when merging adjacent mappings --- kernel/src/vm/vmar/vmar_impls/protect.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kernel/src/vm/vmar/vmar_impls/protect.rs b/kernel/src/vm/vmar/vmar_impls/protect.rs index 231241544..d85f3dfff 100644 --- a/kernel/src/vm/vmar/vmar_impls/protect.rs +++ b/kernel/src/vm/vmar/vmar_impls/protect.rs @@ -43,7 +43,12 @@ impl Vmar { let new_perms = perms | (vm_mapping_perms & VmPerms::ALL_MAY_PERMS); new_perms.check()?; - let vm_mapping = inner.remove(&vm_mapping_range.start).unwrap(); + let Some(vm_mapping) = inner.remove(&vm_mapping_range.start) else { + // This can happen only if the mapping is merged to the previous one (just + // protected before). We can skip this mapping because its property is already + // correct. + continue; + }; let vm_mapping_range = vm_mapping.range(); let intersected_range = get_intersected_range(&range, &vm_mapping_range);