vmdk: Check for overhead when opening
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>
This commit is contained in:
		
							parent
							
								
									46bae92713
								
							
						
					
					
						commit
						34ceed81f9
					
				@ -640,6 +640,13 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
 | 
				
			|||||||
    if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) {
 | 
					    if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) {
 | 
				
			||||||
        l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9;
 | 
					        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,
 | 
					    ret = vmdk_add_extent(bs, file, false,
 | 
				
			||||||
                          le64_to_cpu(header.capacity),
 | 
					                          le64_to_cpu(header.capacity),
 | 
				
			||||||
                          le64_to_cpu(header.gd_offset) << 9,
 | 
					                          le64_to_cpu(header.gd_offset) << 9,
 | 
				
			||||||
 | 
				
			|||||||
@ -97,6 +97,12 @@ RW 12582912 VMFS "dummy.vmdk" 1
 | 
				
			|||||||
EOF
 | 
					EOF
 | 
				
			||||||
_img_info
 | 
					_img_info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo "=== Testing truncated sparse ==="
 | 
				
			||||||
 | 
					IMGOPTS="subformat=monolithicSparse" _make_test_img 100G
 | 
				
			||||||
 | 
					truncate -s 10M $TEST_IMG
 | 
				
			||||||
 | 
					_img_info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo
 | 
					echo
 | 
				
			||||||
echo "=== Testing version 3 ==="
 | 
					echo "=== Testing version 3 ==="
 | 
				
			||||||
_use_sample_img iotest-version3.vmdk.bz2
 | 
					_use_sample_img iotest-version3.vmdk.bz2
 | 
				
			||||||
 | 
				
			|||||||
@ -2043,6 +2043,11 @@ qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Invalid extent lines:
 | 
				
			|||||||
RW 12582912 VMFS "dummy.IMGFMT" 1
 | 
					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 ===
 | 
					=== Testing version 3 ===
 | 
				
			||||||
image: TEST_DIR/iotest-version3.IMGFMT
 | 
					image: TEST_DIR/iotest-version3.IMGFMT
 | 
				
			||||||
file format: IMGFMT
 | 
					file format: IMGFMT
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user