From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-stable@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PATCH 17/43] block: Don't probe for unknown backing file format
Date: Tue, 24 Feb 2015 15:47:52 -0600 [thread overview]
Message-ID: <1424814498-6993-18-git-send-email-mdroth@linux.vnet.ibm.com> (raw)
In-Reply-To: <1424814498-6993-1-git-send-email-mdroth@linux.vnet.ibm.com>
From: Kevin Wolf <kwolf@redhat.com>
If a qcow2 image specifies a backing file format that doesn't correspond
to any format driver that qemu knows, we shouldn't fall back to probing,
but simply error out.
Not looking up the backing file driver in bdrv_open_backing_file(), but
just filling in the "driver" option if it isn't there moves us closer to
the goal of having everything in QDict options and gets us the error
handling of bdrv_open(), which correctly refuses unknown drivers.
Cc: qemu-stable@nongnu.org
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-id: 1416935562-7760-4-git-send-email-kwolf@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit c5f6e493bb5339d244eae5d3f21c5b6d73996739)
Conflicts:
tests/qemu-iotests/group
*resolved context conflict due to group 113 being present locally
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
block.c | 7 +++---
tests/qemu-iotests/114 | 61 ++++++++++++++++++++++++++++++++++++++++++++++
tests/qemu-iotests/114.out | 13 ++++++++++
tests/qemu-iotests/group | 1 +
4 files changed, 78 insertions(+), 4 deletions(-)
create mode 100755 tests/qemu-iotests/114
create mode 100644 tests/qemu-iotests/114.out
diff --git a/block.c b/block.c
index 07f58fc..8717597 100644
--- a/block.c
+++ b/block.c
@@ -1175,7 +1175,6 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
{
char *backing_filename = g_malloc0(PATH_MAX);
int ret = 0;
- BlockDriver *back_drv = NULL;
BlockDriverState *backing_hd;
Error *local_err = NULL;
@@ -1208,14 +1207,14 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
backing_hd = bdrv_new();
- if (bs->backing_format[0] != '\0') {
- back_drv = bdrv_find_format(bs->backing_format);
+ if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
+ qdict_put(options, "driver", qstring_from_str(bs->backing_format));
}
assert(bs->backing_hd == NULL);
ret = bdrv_open(&backing_hd,
*backing_filename ? backing_filename : NULL, NULL, options,
- bdrv_backing_flags(bs->open_flags), back_drv, &local_err);
+ bdrv_backing_flags(bs->open_flags), NULL, &local_err);
if (ret < 0) {
bdrv_unref(backing_hd);
backing_hd = NULL;
diff --git a/tests/qemu-iotests/114 b/tests/qemu-iotests/114
new file mode 100755
index 0000000..d02e7ff
--- /dev/null
+++ b/tests/qemu-iotests/114
@@ -0,0 +1,61 @@
+#!/bin/bash
+#
+# Test invalid backing file format in qcow2 images
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+# creator
+owner=kwolf@redhat.com
+
+seq="$(basename $0)"
+echo "QA output created by $seq"
+
+here="$PWD"
+tmp=/tmp/$$
+status=1 # failure is the default!
+
+_cleanup()
+{
+ _cleanup_test_img
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_supported_fmt qcow2
+_supported_proto generic
+_supported_os Linux
+
+
+TEST_IMG="$TEST_IMG.base" _make_test_img 64M
+_make_test_img -b "$TEST_IMG.base" 64M
+
+# Set an invalid backing file format
+$PYTHON qcow2.py "$TEST_IMG" add-header-ext 0xE2792ACA "foo"
+_img_info
+
+# Try opening the image. Should fail (and not probe) in the first case, but
+# overriding the backing file format should be possible.
+$QEMU_IO -c "open $TEST_IMG" -c "read 0 4k" 2>&1 | _filter_qemu_io | _filter_testdir
+$QEMU_IO -c "open -o backing.driver=$IMGFMT $TEST_IMG" -c "read 0 4k" | _filter_qemu_io
+
+# success, all done
+echo '*** done'
+rm -f $seq.full
+status=0
diff --git a/tests/qemu-iotests/114.out b/tests/qemu-iotests/114.out
new file mode 100644
index 0000000..6c6b210
--- /dev/null
+++ b/tests/qemu-iotests/114.out
@@ -0,0 +1,13 @@
+QA output created by 114
+Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file='TEST_DIR/t.IMGFMT.base'
+image: TEST_DIR/t.IMGFMT
+file format: IMGFMT
+virtual size: 64M (67108864 bytes)
+cluster_size: 65536
+backing file: TEST_DIR/t.IMGFMT.base
+backing file format: foo
+qemu-io: can't open device TEST_DIR/t.qcow2: Could not open backing file: Unknown driver 'foo'
+read 4096/4096 bytes at offset 0
+4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+*** done
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index fd2c64a..da59f57 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -113,3 +113,4 @@
108 rw auto quick
111 rw auto quick
113 rw auto quick
+114 rw auto quick
--
1.9.1
next prev parent reply other threads:[~2015-02-24 21:51 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-24 21:47 [Qemu-devel] Patch Round-up for stable 2.2.1, freeze on 2015-03-05 Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 01/43] block: Make essential BlockDriver objects public Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 02/43] block: Omit bdrv_find_format for essential drivers Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 03/43] block/vvfat: qcow driver may not be found Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 04/43] block/nfs: Add create_opts Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 05/43] block: Check create_opts before image creation Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 06/43] qemu-img: " Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 07/43] qemu-img: Check create_opts before image amendment Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 08/43] iotests: Only kill NBD server if it runs Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 09/43] iotests: Add test for unsupported image creation Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 10/43] qcow2: Prevent numerical overflow Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 11/43] qcow2: Flushing the caches in qcow2_close may fail Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 12/43] qcow2: Respect bdrv_truncate() error Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 13/43] block/raw-posix: Fix ret in raw_open_common() Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 14/43] block migration: fix return value Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 15/43] qcow2: Fix header extension size check Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 16/43] qcow2.py: Add required padding for header extensions Michael Roth
2015-02-24 21:47 ` Michael Roth [this message]
2015-02-24 21:47 ` [Qemu-devel] [PATCH 18/43] linuxboot: fix loading old kernels Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 19/43] audio: Don't free hw resources until after hw backend is stopped Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 20/43] target-xtensa: fix translation for opcodes crossing page boundary Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 21/43] target-xtensa: test cross-page opcode Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 22/43] migration/block: fix pending() return value Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 23/43] atomic: fix position of volatile qualifier Michael Roth
2015-02-24 21:47 ` [Qemu-devel] [PATCH 24/43] PPC: Fix crash on spapr_tce_table_finalize() Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 25/43] vl.c: fix regression when reading machine type from config file Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 26/43] serial: reset thri_pending on IER writes with THRI=0 Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 27/43] serial: refine serial_thr_ipending_needed Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 28/43] pckbd: set bits 2-3-6-7 of the output port by default Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 29/43] linux-user: Fix broken m68k signal handling on 64 bit hosts Michael Roth
2015-02-25 8:39 ` Laurent Vivier
2015-02-25 11:28 ` Peter Maydell
2015-02-25 11:58 ` Laurent Vivier
2015-02-25 12:14 ` Peter Maydell
2015-02-24 21:48 ` [Qemu-devel] [PATCH 30/43] scsi: fix cancellation when I/O was completed but DMA was not Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 31/43] target-i386: fix movntsd on big-endian hosts Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 32/43] vt82c686: avoid out-of-bounds read Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 33/43] virtio: fix feature bit checks Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 34/43] sb16: fix interrupt acknowledgement Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 35/43] hw/input/hid.c Fix capslock hid code Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 36/43] target-arm/translate-a64: Fix wrong mmu_idx usage for LDT/STT Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 37/43] vfio-pci: Fix missing unparent of dynamically allocated MemoryRegion Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 38/43] qemu-thread: fix qemu_event without futexes Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 39/43] libcacard: stop linking against every single 3rd party library Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 40/43] fix mc146818rtc wrong subsection name to avoid vmstate_subsection_load() fail Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 41/43] block/iscsi: fix uninitialized variable Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 42/43] qtest: Fix deadloop by running main loop AIO context's timers Michael Roth
2015-02-24 21:48 ` [Qemu-devel] [PATCH 43/43] exec: change default exception_index value for migration to -1 Michael Roth
2015-02-25 2:51 ` [Qemu-devel] [Qemu-stable] Patch Round-up for stable 2.2.1, freeze on 2015-03-05 Gonglei (Arei)
2015-02-25 9:33 ` [Qemu-devel] " Leon Alrae
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1424814498-6993-18-git-send-email-mdroth@linux.vnet.ibm.com \
--to=mdroth@linux.vnet.ibm.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).