cryptospore / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
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) {