]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: forbid negative number in address(like controller, bus, slot...)
authorLuyao Huang <lhuang@redhat.com>
Mon, 8 Dec 2014 08:27:26 +0000 (16:27 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 9 Dec 2014 10:35:27 +0000 (11:35 +0100)
https://bugzilla.redhat.com/show_bug.cgi?id=1171582

When we edit a negative controller address number to a device,
some of them will auto generate a controller with invalid index
number. This will make guest disappear after restart libvirtd.
Instead of allowing negative number for controller index, we
should forbid negative number in these place (we did this before,
but after f18c02ec, virStrToLong_ui changed to allow negative
number). Therefore switch to virStrToLong_uip in these places.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/device_conf.c
src/conf/domain_conf.c

index b3b04e1477da517775037eb6e42897ba0f64868c..5ffe159b79e03acb15f991fe3cd805159459149d 100644 (file)
@@ -64,28 +64,28 @@ virDevicePCIAddressParseXML(xmlNodePtr node,
     multi    = virXMLPropString(node, "multifunction");
 
     if (domain &&
-        virStrToLong_ui(domain, NULL, 0, &addr->domain) < 0) {
+        virStrToLong_uip(domain, NULL, 0, &addr->domain) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'domain' attribute"));
         goto cleanup;
     }
 
     if (bus &&
-        virStrToLong_ui(bus, NULL, 0, &addr->bus) < 0) {
+        virStrToLong_uip(bus, NULL, 0, &addr->bus) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'bus' attribute"));
         goto cleanup;
     }
 
     if (slot &&
-        virStrToLong_ui(slot, NULL, 0, &addr->slot) < 0) {
+        virStrToLong_uip(slot, NULL, 0, &addr->slot) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'slot' attribute"));
         goto cleanup;
     }
 
     if (function &&
-        virStrToLong_ui(function, NULL, 0, &addr->function) < 0) {
+        virStrToLong_uip(function, NULL, 0, &addr->function) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'function' attribute"));
         goto cleanup;
index 843cdecf13d9741b3d5a5872af41e44351c89635..db3369e20adaa9faffabde4a5f93675e7342f493 100644 (file)
@@ -3455,28 +3455,28 @@ virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
     unit = virXMLPropString(node, "unit");
 
     if (controller &&
-        virStrToLong_ui(controller, NULL, 10, &addr->controller) < 0) {
+        virStrToLong_uip(controller, NULL, 10, &addr->controller) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'controller' attribute"));
         goto cleanup;
     }
 
     if (bus &&
-        virStrToLong_ui(bus, NULL, 10, &addr->bus) < 0) {
+        virStrToLong_uip(bus, NULL, 10, &addr->bus) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'bus' attribute"));
         goto cleanup;
     }
 
     if (target &&
-        virStrToLong_ui(target, NULL, 10, &addr->target) < 0) {
+        virStrToLong_uip(target, NULL, 10, &addr->target) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'target' attribute"));
         goto cleanup;
     }
 
     if (unit &&
-        virStrToLong_ui(unit, NULL, 10, &addr->unit) < 0) {
+        virStrToLong_uip(unit, NULL, 10, &addr->unit) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'unit' attribute"));
         goto cleanup;
@@ -3509,21 +3509,21 @@ virDomainDeviceVirtioSerialAddressParseXML(
     port = virXMLPropString(node, "port");
 
     if (controller &&
-        virStrToLong_ui(controller, NULL, 10, &addr->controller) < 0) {
+        virStrToLong_uip(controller, NULL, 10, &addr->controller) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'controller' attribute"));
         goto cleanup;
     }
 
     if (bus &&
-        virStrToLong_ui(bus, NULL, 10, &addr->bus) < 0) {
+        virStrToLong_uip(bus, NULL, 10, &addr->bus) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'bus' attribute"));
         goto cleanup;
     }
 
     if (port &&
-        virStrToLong_ui(port, NULL, 10, &addr->port) < 0) {
+        virStrToLong_uip(port, NULL, 10, &addr->port) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'port' attribute"));
         goto cleanup;
@@ -3555,19 +3555,19 @@ virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
 
     if (cssid && ssid && devno) {
         if (cssid &&
-            virStrToLong_ui(cssid, NULL, 0, &addr->cssid) < 0) {
+            virStrToLong_uip(cssid, NULL, 0, &addr->cssid) < 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("Cannot parse <address> 'cssid' attribute"));
             goto cleanup;
         }
         if (ssid &&
-            virStrToLong_ui(ssid, NULL, 0, &addr->ssid) < 0) {
+            virStrToLong_uip(ssid, NULL, 0, &addr->ssid) < 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("Cannot parse <address> 'ssid' attribute"));
             goto cleanup;
         }
         if (devno &&
-            virStrToLong_ui(devno, NULL, 0, &addr->devno) < 0) {
+            virStrToLong_uip(devno, NULL, 0, &addr->devno) < 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("Cannot parse <address> 'devno' attribute"));
             goto cleanup;
@@ -3609,14 +3609,14 @@ virDomainDeviceCcidAddressParseXML(xmlNodePtr node,
     slot = virXMLPropString(node, "slot");
 
     if (controller &&
-        virStrToLong_ui(controller, NULL, 10, &addr->controller) < 0) {
+        virStrToLong_uip(controller, NULL, 10, &addr->controller) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'controller' attribute"));
         goto cleanup;
     }
 
     if (slot &&
-        virStrToLong_ui(slot, NULL, 10, &addr->slot) < 0) {
+        virStrToLong_uip(slot, NULL, 10, &addr->slot) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'slot' attribute"));
         goto cleanup;
@@ -3644,7 +3644,7 @@ virDomainDeviceUSBAddressParseXML(xmlNodePtr node,
     bus = virXMLPropString(node, "bus");
 
     if (port &&
-        ((virStrToLong_ui(port, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.')) ||
+        ((virStrToLong_uip(port, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.')) ||
          (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.'))) ||
          (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.'))) ||
          (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0'))))) {
@@ -3657,7 +3657,7 @@ virDomainDeviceUSBAddressParseXML(xmlNodePtr node,
     port = NULL;
 
     if (bus &&
-        virStrToLong_ui(bus, NULL, 10, &addr->bus) < 0) {
+        virStrToLong_uip(bus, NULL, 10, &addr->bus) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Cannot parse <address> 'bus' attribute"));
         goto cleanup;
@@ -3779,14 +3779,14 @@ virDomainDeviceISAAddressParseXML(xmlNodePtr node,
     irq = virXMLPropString(node, "irq");
 
     if (iobase &&
-        virStrToLong_ui(iobase, NULL, 16, &addr->iobase) < 0) {
+        virStrToLong_uip(iobase, NULL, 16, &addr->iobase) < 0) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
                        _("Cannot parse <address> 'iobase' attribute"));
         goto cleanup;
     }
 
     if (irq &&
-        virStrToLong_ui(irq, NULL, 16, &addr->irq) < 0) {
+        virStrToLong_uip(irq, NULL, 16, &addr->irq) < 0) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
                        _("Cannot parse <address> 'irq' attribute"));
         goto cleanup;