From 955d9bb8d0071a9cc7d4851eb329054fa4a97cbf Mon Sep 17 00:00:00 2001 From: Luyao Huang Date: Wed, 17 Jun 2015 11:56:21 +0800 Subject: [PATCH] qemu: report error when shmem has an invalid address If user passes an invalid address for shared memory device to qemu, neither libvirt nor qemu will report an error, but qemu will auto assign a pci address to the shared memory device. Signed-off-by: Luyao Huang --- src/qemu/qemu_command.c | 7 ++++++ .../qemuxml2argv-shmem-invalid-address.xml | 24 +++++++++++++++++++ tests/qemuxml2argvtest.c | 2 ++ 3 files changed, 33 insertions(+) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-shmem-invalid-address.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 287c51dc91..b7b85aba31 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8575,6 +8575,13 @@ qemuBuildShmemDevStr(virDomainDefPtr def, } } + if (shmem->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only 'pci' addresses are supported for the " + "shared memory device")); + goto error; + } + if (qemuBuildDeviceAddressStr(&buf, def, &shmem->info, qemuCaps) < 0) goto error; diff --git a/tests/qemuxml2argvdata/qemuxml2argv-shmem-invalid-address.xml b/tests/qemuxml2argvdata/qemuxml2argv-shmem-invalid-address.xml new file mode 100644 index 0000000000..8a4e56d592 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-shmem-invalid-address.xml @@ -0,0 +1,24 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + +
+ + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index bee6637276..24c1f301e4 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1614,6 +1614,8 @@ mymain(void) DO_TEST_FAILURE("shmem", NONE); DO_TEST_FAILURE("shmem-invalid-size", QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_IVSHMEM); + DO_TEST_FAILURE("shmem-invalid-address", QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_IVSHMEM); DO_TEST_FAILURE("shmem-small-size", QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_IVSHMEM); DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);