From e6e78e5986aab8fa9094bb612220cf2b41c0d4a6 Mon Sep 17 00:00:00 2001 From: Wei Liu Date: Mon, 6 Jan 2025 18:40:48 +0000 Subject: [PATCH] block: vhdx: reject zero size virtual disk Some calculation down the road depends on that value not being zero. Signed-off-by: Wei Liu --- block/src/vhdx/vhdx_metadata.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/block/src/vhdx/vhdx_metadata.rs b/block/src/vhdx/vhdx_metadata.rs index 7c274487a..6284a9a5b 100644 --- a/block/src/vhdx/vhdx_metadata.rs +++ b/block/src/vhdx/vhdx_metadata.rs @@ -55,6 +55,8 @@ const METADATA_LENGTH_MAX: u32 = 1 << 20; // 1 MiB pub enum VhdxMetadataError { #[error("Invalid block size count")] InvalidBlockSize, + #[error("Invalid disk size {0}")] + InvalidDiskSize(u64), #[error("Invalid metadata entry count")] InvalidEntryCount, #[error("Invalid logical sector size")] @@ -214,6 +216,14 @@ impl DiskSpec { if metadata_presence != METADATA_ALL_PRESENT { return Err(VhdxMetadataError::MissingMetadata); } + // Make sure virtual disk size is not zero + if (metadata_presence & METADATA_VIRTUAL_DISK_SIZE_PRESENT != 0) + && disk_spec.virtual_disk_size == 0 + { + return Err(VhdxMetadataError::InvalidDiskSize( + disk_spec.virtual_disk_size, + )); + } // Check if the virtual disk size is a multiple of the logical sector // size. if ((metadata_presence & METADATA_LOGICAL_SECTOR_SIZE_PRESENT) != 0)