diff --git a/src/vmm/src/vstate/memory.rs b/src/vmm/src/vstate/memory.rs index c4185e78b2d..2d3f6a1b724 100644 --- a/src/vmm/src/vstate/memory.rs +++ b/src/vmm/src/vstate/memory.rs @@ -297,7 +297,10 @@ pub fn snapshot_file( track_dirty_pages: bool, ) -> Result, MemoryError> { let regions: Vec<_> = regions.collect(); - let memory_size: u64 = regions.iter().map(|(_, size)| *size as u64).sum(); + let memory_size = regions + .iter() + .try_fold(0u64, |acc, (_, size)| acc.checked_add(*size as u64)) + .ok_or(MemoryError::OffsetTooLarge)?; let file_size = file.metadata().map_err(MemoryError::FileMetadata)?.len(); // ensure we do not mmap beyond EOF. The kernel would allow that but a SIGBUS is triggered