diff options
author | Fam Zheng <famz@redhat.com> | 2013-06-13 11:21:29 +0800 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2013-06-24 10:25:43 +0200 |
commit | 96c51eb5e46af2312b33f745ad72acb20e799aea (patch) | |
tree | dc0cbcb302fd2b5238c7c0ba56be8717230c80d1 | |
parent | 50b05b6f2e24296b4d739a638e1e7427767ed7cd (diff) | |
download | qemu-96c51eb5e46af2312b33f745ad72acb20e799aea.zip qemu-96c51eb5e46af2312b33f745ad72acb20e799aea.tar.gz qemu-96c51eb5e46af2312b33f745ad72acb20e799aea.tar.bz2 |
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.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/block/vmdk.c b/block/vmdk.c index 65ae011..975e1d4 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) { |