From 70dbf8478252be55dc38a86f60db0ee1fe36c860 Mon Sep 17 00:00:00 2001 From: "Hui, Chunyang" Date: Thu, 14 Apr 2022 03:38:55 +0000 Subject: [PATCH] Fix single-VMA chunk range conflict due to mremap locking order --- src/libos/src/vm/vm_manager.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libos/src/vm/vm_manager.rs b/src/libos/src/vm/vm_manager.rs index bd44d173..51951e9c 100644 --- a/src/libos/src/vm/vm_manager.rs +++ b/src/libos/src/vm/vm_manager.rs @@ -424,8 +424,9 @@ impl VMManager { // Try merging all connecting chunks { - let mut merged_vmas = current.vm().merge_all_single_vma_chunks()?; + // Must lock the internal manager first here in case the chunk's range and vma are conflict when other threads are operating the VM let mut internal_manager = self.internal.lock().unwrap(); + let mut merged_vmas = current.vm().merge_all_single_vma_chunks()?; while merged_vmas.len() != 0 { let merged_vma = merged_vmas.pop().unwrap(); internal_manager.add_new_chunk(¤t, merged_vma);