aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFam Zheng <famz@redhat.com>2013-06-13 11:21:29 +0800
committerStefan Hajnoczi <stefanha@redhat.com>2013-06-24 10:25:43 +0200
commit96c51eb5e46af2312b33f745ad72acb20e799aea (patch)
treedc0cbcb302fd2b5238c7c0ba56be8717230c80d1
parent50b05b6f2e24296b4d739a638e1e7427767ed7cd (diff)
vmdk: refuse to open higher version than supported
Refuse to open higher version for safety. Although we try to be compatible with published VMDK spec, VMware has newer version from ESXi 5.1 exported OVF/OVA, which we have no knowledge what's changed in it. And it is very likely to have more new versions in the future, so it's not safe to open them blindly. Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r--block/vmdk.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/block/vmdk.c b/block/vmdk.c
index 65ae0119c4..975e1d41ff 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -561,6 +561,15 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
header = footer.header;
}
+ if (le32_to_cpu(header.version) >= 3) {
+ char buf[64];
+ snprintf(buf, sizeof(buf), "VMDK version %d",
+ le32_to_cpu(header.version));
+ qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
+ bs->device_name, "vmdk", buf);
+ return -ENOTSUP;
+ }
+
l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gte)
* le64_to_cpu(header.granularity);
if (l1_entry_sectors == 0) {