From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47632) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ur2oD-0002km-32 for qemu-devel@nongnu.org; Mon, 24 Jun 2013 05:11:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ur2o9-0007k7-70 for qemu-devel@nongnu.org; Mon, 24 Jun 2013 05:11:37 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43318) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ur2o8-0007jU-QS for qemu-devel@nongnu.org; Mon, 24 Jun 2013 05:11:32 -0400 From: Stefan Hajnoczi Date: Mon, 24 Jun 2013 11:10:35 +0200 Message-Id: <1372065035-19601-24-git-send-email-stefanha@redhat.com> In-Reply-To: <1372065035-19601-1-git-send-email-stefanha@redhat.com> References: <1372065035-19601-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PATCH 23/23] vmdk: refuse to open higher version than supported List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori , Fam Zheng , Stefan Hajnoczi From: Fam Zheng 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 Signed-off-by: Stefan Hajnoczi --- block/vmdk.c | 9 +++++++++ 1 file changed, 9 insertions(+) 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) { -- 1.8.1.4