]> xenbits.xensource.com Git - libvirt.git/commitdiff
Change domain controller index type to unsigned
authorJincheng Miao <jmiao@redhat.com>
Fri, 12 Jul 2013 12:17:23 +0000 (14:17 +0200)
committerJán Tomko <jtomko@redhat.com>
Fri, 12 Jul 2013 12:55:04 +0000 (14:55 +0200)
Error out on negative index values.

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

src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_command.c
src/vmx/vmx.c
tests/qemuxml2argvdata/qemuxml2argv-pci-bridge-negative-index-invalid.xml [new file with mode: 0644]
tests/qemuxml2argvtest.c

index 1c4cb33d10e02fa72a19dc0c6c813a25083f70c2..5f0366e426b503a07700f86bb02e8654184e4c4c 100644 (file)
@@ -2653,7 +2653,7 @@ virDomainDefRejectDuplicateControllers(virDomainDefPtr def)
 
     for (i = 0; i < def->ncontrollers; i++) {
         cont = def->controllers[i];
-        if (cont->idx > max_idx[cont->type])
+        if ((int) cont->idx > max_idx[cont->type])
             max_idx[cont->type] = cont->idx;
     }
 
@@ -5567,7 +5567,8 @@ virDomainControllerDefParseXML(xmlNodePtr node,
 
     idx = virXMLPropString(node, "index");
     if (idx) {
-        if (virStrToLong_i(idx, NULL, 10, &def->idx) < 0) {
+        if (virStrToLong_ui(idx, NULL, 10, &def->idx) < 0 ||
+            def->idx > INT_MAX) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("Cannot parse controller index %s"), idx);
             goto error;
@@ -14381,7 +14382,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
     }
 
     virBufferAsprintf(buf,
-                      "    <controller type='%s' index='%d'",
+                      "    <controller type='%s' index='%u'",
                       type, def->idx);
 
     if (model) {
index 9c563fe10f4eb06cad0369b4566eaf743387017b..ef72d248303ac30eed33fee8be77c73b6e4ab7da 100644 (file)
@@ -790,7 +790,7 @@ struct _virDomainVirtioSerialOpts {
 /* Stores the virtual disk controller configuration */
 struct _virDomainControllerDef {
     int type;
-    int idx;
+    unsigned int idx;
     int model; /* -1 == undef */
     unsigned int queues;
     union {
index 879aed81a3148a74e7313383cdf0d19bd3ff6672..0e517f21a78e2f0039e6ae7c18a4c277800a6091 100644 (file)
@@ -1573,7 +1573,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
 
         for (i = 0; i < def->ncontrollers; i++) {
             if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
-                if (def->controllers[i]->idx > max_idx)
+                if ((int) def->controllers[i]->idx > max_idx)
                     max_idx = def->controllers[i]->idx;
             }
         }
index 48b7f1d2f344bf3fe2fc5a521f2a5b0477b75764..28a6f103b22f7e47a7cbd861dcdea145b59b4291 100644 (file)
@@ -1653,8 +1653,7 @@ virVMXParseConfig(virVMXContext *ctx,
 
     for (controller = 0; controller < def->ncontrollers; ++controller) {
         if (def->controllers[controller]->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
-            if (def->controllers[controller]->idx < 0 ||
-                def->controllers[controller]->idx > 3) {
+            if (def->controllers[controller]->idx > 3) {
                 virReportError(VIR_ERR_INTERNAL_ERROR,
                                _("SCSI controller index %d out of [0..3] range"),
                                def->controllers[controller]->idx);
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pci-bridge-negative-index-invalid.xml b/tests/qemuxml2argvdata/qemuxml2argv-pci-bridge-negative-index-invalid.xml
new file mode 100644 (file)
index 0000000..be3d8f2
--- /dev/null
@@ -0,0 +1,15 @@
+<domain type='qemu'>
+  <name>fdr-br</name>
+  <memory unit='KiB'>2097152</memory>
+  <currentMemory unit='KiB'>2097152</currentMemory>
+  <vcpu placement='static' cpuset='0-1'>2</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc-1.2'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <devices>
+    <emulator>/usr/libexec/qemu-kvm</emulator>
+    <controller type='pci' index='0' model='pci-root'/>
+    <controller type='pci' index='-1' model='pci-bridge'/>
+  </devices>
+</domain>
index d0d9cad92d950206e37ab53328caaaa45d379d80..7d7332f8e3c7963aa52796e632fa6173de515c11 100644 (file)
@@ -1015,6 +1015,9 @@ mymain(void)
     DO_TEST("mlock-off", QEMU_CAPS_MLOCK);
     DO_TEST("mlock-unsupported", NONE);
 
+    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
+                        QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
+
     virObjectUnref(driver.config);
     virObjectUnref(driver.caps);
     virObjectUnref(driver.xmlopt);