]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: report error when shmem has an invalid address
authorLuyao Huang <lhuang@redhat.com>
Wed, 17 Jun 2015 03:56:21 +0000 (11:56 +0800)
committerMartin Kletzander <mkletzan@redhat.com>
Wed, 8 Jul 2015 14:30:42 +0000 (16:30 +0200)
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 <lhuang@redhat.com>
src/qemu/qemu_command.c
tests/qemuxml2argvdata/qemuxml2argv-shmem-invalid-address.xml [new file with mode: 0644]
tests/qemuxml2argvtest.c

index 287c51dc9116b1d817b6013eb9a01bc304f01634..b7b85aba31dcdba0c3049209590e040b810ca333 100644 (file)
@@ -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 (file)
index 0000000..8a4e56d
--- /dev/null
@@ -0,0 +1,24 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219136</memory>
+  <currentMemory unit='KiB'>219136</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu</emulator>
+    <controller type='usb' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <memballoon model='none'/>
+    <shmem name='shmem0'>
+      <address type='isa'/>
+    </shmem>
+  </devices>
+</domain>
index bee66372767b5c2fc29a06cf867da67e20cd1f3d..24c1f301e4b97f1f7c85405b8e999d5cf6496458 100644 (file)
@@ -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);