]> xenbits.xensource.com Git - qemu-upstream-unstable.git/commitdiff
vmdk: Check for overhead when opening
authorFam Zheng <famz@redhat.com>
Tue, 21 Jan 2014 07:07:43 +0000 (15:07 +0800)
committerKevin Wolf <kwolf@redhat.com>
Fri, 24 Jan 2014 13:33:00 +0000 (14:33 +0100)
Report an error if file size is even smaller than metadata.

Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block/vmdk.c
tests/qemu-iotests/059
tests/qemu-iotests/059.out

index 599a9285450f380b71c6c664e75b5ef975cf50dc..74c44bd5fb524e4c059de95f9ae1cc9f4540848f 100644 (file)
@@ -640,6 +640,13 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
     if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) {
         l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9;
     }
+    if (bdrv_getlength(file) <
+            le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE) {
+        error_report("File truncated, expecting at least %lld bytes",
+                le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE);
+        return -EINVAL;
+    }
+
     ret = vmdk_add_extent(bs, file, false,
                           le64_to_cpu(header.capacity),
                           le64_to_cpu(header.gd_offset) << 9,
index 64ed04cfce0dfcbe6507b82208573ec216c505d2..2d604d3a9103634f5e4f8d12317ffe3162240c58 100755 (executable)
@@ -97,6 +97,12 @@ RW 12582912 VMFS "dummy.vmdk" 1
 EOF
 _img_info
 
+echo
+echo "=== Testing truncated sparse ==="
+IMGOPTS="subformat=monolithicSparse" _make_test_img 100G
+truncate -s 10M $TEST_IMG
+_img_info
+
 echo
 echo "=== Testing version 3 ==="
 _use_sample_img iotest-version3.vmdk.bz2
index 5e30e69befe696f4ad0194d3956643c362653d18..4ffeb54710650eaf987007935b0af1a5ea956c1a 100644 (file)
@@ -2043,6 +2043,11 @@ qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Invalid extent lines:
 RW 12582912 VMFS "dummy.IMGFMT" 1
 
 
+=== Testing truncated sparse ===
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400
+qemu-img: File truncated, expecting at least 13172736 bytes
+qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Wrong medium type
+
 === Testing version 3 ===
 image: TEST_DIR/iotest-version3.IMGFMT
 file format: IMGFMT