]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: report error in virCPUDefParseXML
authorJincheng Miao <jmiao@redhat.com>
Thu, 25 Sep 2014 11:28:33 +0000 (19:28 +0800)
committerMartin Kletzander <mkletzan@redhat.com>
Fri, 26 Sep 2014 14:03:14 +0000 (16:03 +0200)
When detected invalid 'memAccess', virCPUDefParseXML should report error.

Resolves https://bugzilla.redhat.com/show_bug.cgi?id=1146334

Signed-off-by: Jincheng Miao <jmiao@redhat.com>
src/conf/cpu_conf.c
tests/qemuxml2argvdata/qemuxml2argv-hugepages-memaccess-invalid.xml [new file with mode: 0644]
tests/qemuxml2argvtest.c

index 116aa58e3f148e75c099a2984b02aea023c6295e..9b7fbb080b0104dea588eb29590a31a4e8d96986 100644 (file)
@@ -507,17 +507,19 @@ virCPUDefParseXML(xmlNodePtr node,
 
             memAccessStr = virXMLPropString(nodes[i], "memAccess");
             if (memAccessStr) {
-                def->cells[cur_cell].memAccess =
-                    virMemAccessTypeFromString(memAccessStr);
+                int rc = virMemAccessTypeFromString(memAccessStr);
 
-                if (def->cells[cur_cell].memAccess <= 0) {
+                if (rc <= 0) {
                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                    _("Invalid 'memAccess' attribute "
                                      "value '%s'"),
                                    memAccessStr);
                     VIR_FREE(memAccessStr);
-                    goto cleanup;
+                    goto error;
                 }
+
+                def->cells[cur_cell].memAccess = rc;
+
                 VIR_FREE(memAccessStr);
             }
         }
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-memaccess-invalid.xml b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-memaccess-invalid.xml
new file mode 100644 (file)
index 0000000..83b8ac2
--- /dev/null
@@ -0,0 +1,45 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>4194304</memory>
+  <currentMemory unit='KiB'>4194304</currentMemory>
+  <memoryBacking>
+    <hugepages>
+      <page size='2048' unit='KiB' nodeset='1'/>
+      <page size='1048576' unit='KiB' nodeset='0,2-3'/>
+    </hugepages>
+  </memoryBacking>
+  <vcpu placement='static'>4</vcpu>
+  <numatune>
+    <memory mode='strict' nodeset='0-3'/>
+    <memnode cellid='3' mode='strict' nodeset='3'/>
+  </numatune>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <cpu>
+    <numa>
+      <cell id='0' cpus='0' memory='1048576'/>
+      <cell id='1' cpus='1' memory='1048576' memAccess='invalid'/>
+      <cell id='2' cpus='2' memory='1048576' memAccess='private'/>
+      <cell id='3' cpus='3' memory='1048576'/>
+    </numa>
+  </cpu>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu</emulator>
+    <disk type='block' device='disk'>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <controller type='usb' index='0'/>
+    <controller type='ide' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
index 4c85bfe5471548b83fb5cf14a6b53b7f98df8976..b380fd86cfc0610f00547422dd84cf8722444b37 100644 (file)
@@ -691,6 +691,7 @@ mymain(void)
             QEMU_CAPS_OBJECT_MEMORY_FILE);
     DO_TEST("hugepages-shared", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_RAM,
             QEMU_CAPS_OBJECT_MEMORY_FILE);
+    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
     DO_TEST_FAILURE("hugepages-pages4", QEMU_CAPS_MEM_PATH,
             QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
     DO_TEST("hugepages-pages5", QEMU_CAPS_MEM_PATH);