mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
block: Fail gracefully when using a format driver on protocol level
Specifying the wrong driver could fail an assertion: $ qemu-system-x86_64 -drive file.driver=qcow2,file=x qemu-system-x86_64: block.c:721: bdrv_open_common: Assertion `file != ((void *)0)' failed. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
bdda92324d
commit
2af5ef70af
3 changed files with 24 additions and 0 deletions
7
block.c
7
block.c
|
@ -718,6 +718,13 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
|
|||
assert(drv->bdrv_parse_filename || filename != NULL);
|
||||
ret = drv->bdrv_file_open(bs, filename, options, open_flags);
|
||||
} else {
|
||||
if (file == NULL) {
|
||||
qerror_report(ERROR_CLASS_GENERIC_ERROR, "Can't use '%s' as a "
|
||||
"block driver for the protocol level",
|
||||
drv->format_name);
|
||||
ret = -EINVAL;
|
||||
goto free_and_fail;
|
||||
}
|
||||
assert(file != NULL);
|
||||
bs->file = file;
|
||||
ret = drv->bdrv_open(bs, options, open_flags);
|
||||
|
|
|
@ -142,6 +142,13 @@ run_qemu -drive media=cdrom,cache=writethrough
|
|||
run_qemu -drive media=cdrom,cache=unsafe
|
||||
run_qemu -drive media=cdrom,cache=invalid_value
|
||||
|
||||
echo
|
||||
echo === Specifying the protocol layer ===
|
||||
echo
|
||||
|
||||
run_qemu -drive file=$TEST_IMG,file.driver=file
|
||||
run_qemu -drive file=$TEST_IMG,file.driver=qcow2
|
||||
|
||||
# success, all done
|
||||
echo "*** done"
|
||||
rm -f $seq.full
|
||||
|
|
|
@ -159,4 +159,14 @@ q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
|||
Testing: -drive media=cdrom,cache=invalid_value
|
||||
QEMU_PROG: -drive media=cdrom,cache=invalid_value: invalid cache option
|
||||
|
||||
|
||||
=== Specifying the protocol layer ===
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,file.driver=file
|
||||
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: Can't use 'qcow2' as a block driver for the protocol level
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: could not open disk image TEST_DIR/t.qcow2: Invalid argument
|
||||
|
||||
*** done
|
||||
|
|
Loading…
Reference in a new issue