|
|
218e99 |
From 06989fa543551f16e41b0218e10125df31ccbc0b Mon Sep 17 00:00:00 2001
|
|
|
218e99 |
From: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
218e99 |
Date: Wed, 31 Jul 2013 09:54:55 +0200
|
|
|
218e99 |
Subject: vmdk: refuse to open higher version than supported
|
|
|
218e99 |
|
|
|
218e99 |
Message-id: <1374654509-5535-4-git-send-email-famz@redhat.com>
|
|
|
218e99 |
Patchwork-id: 52675
|
|
|
218e99 |
O-Subject: [RHEL-7 qemu-kvm PATCH 3/5] vmdk: refuse to open higher version than supported
|
|
|
218e99 |
Bugzilla: 836675
|
|
|
218e99 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
218e99 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
218e99 |
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
|
|
|
218e99 |
RH-Acked-by: Michal Novotny <minovotn@redhat.com>
|
|
|
218e99 |
|
|
|
218e99 |
Refuse to open higher version for safety.
|
|
|
218e99 |
|
|
|
218e99 |
Although we try to be compatible with published VMDK spec, VMware has
|
|
|
218e99 |
newer version from ESXi 5.1 exported OVF/OVA, which we have no knowledge
|
|
|
218e99 |
what's changed in it. And it is very likely to have more new versions in
|
|
|
218e99 |
the future, so it's not safe to open them blindly.
|
|
|
218e99 |
|
|
|
218e99 |
Signed-off-by: Fam Zheng <famz@redhat.com>
|
|
|
218e99 |
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
218e99 |
(cherry picked from commit 96c51eb5e46af2312b33f745ad72acb20e799aea)
|
|
|
218e99 |
Signed-off-by: Fam Zheng <famz@redhat.com>
|
|
|
218e99 |
|
|
|
218e99 |
diff --git a/block/vmdk.c b/block/vmdk.c
|
|
|
218e99 |
index 65ae011..975e1d4 100644
|
|
|
218e99 |
--- a/block/vmdk.c
|
|
|
218e99 |
+++ b/block/vmdk.c
|
|
|
218e99 |
@@ -561,6 +561,15 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
|
|
|
218e99 |
header = footer.header;
|
|
|
218e99 |
}
|
|
|
218e99 |
|
|
|
218e99 |
+ if (le32_to_cpu(header.version) >= 3) {
|
|
|
218e99 |
+ char buf[64];
|
|
|
218e99 |
+ snprintf(buf, sizeof(buf), "VMDK version %d",
|
|
|
218e99 |
+ le32_to_cpu(header.version));
|
|
|
218e99 |
+ qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
|
|
|
218e99 |
+ bs->device_name, "vmdk", buf);
|
|
|
218e99 |
+ return -ENOTSUP;
|
|
|
218e99 |
+ }
|
|
|
218e99 |
+
|
|
|
218e99 |
l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gte)
|
|
|
218e99 |
* le64_to_cpu(header.granularity);
|
|
|
218e99 |
if (l1_entry_sectors == 0) {
|