]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Enforce ranges on cputune variables
authorPeter Krempa <pkrempa@redhat.com>
Mon, 11 Mar 2013 13:20:58 +0000 (14:20 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 2 Apr 2013 12:50:25 +0000 (14:50 +0200)
The limits are documented at
http://libvirt.org/formatdomain.html#elementsCPUTuning . Enforce them
when going through XML parsing in addition to being enforced by the API.

src/conf/domain_conf.c

index f3fca7f3a5b6e72074002a63637566df3ab54621..371d80cae952363786076fdffddc53ab4a70275d 100644 (file)
@@ -9677,6 +9677,14 @@ virDomainDefParseXML(virCapsPtr caps,
         goto error;
     }
 
+    if (def->cputune.period > 0 &&
+        (def->cputune.period < 1000 || def->cputune.period > 1000000)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("Value of cputune period must be in range "
+                         "[1000, 1000000]"));
+        goto error;
+    }
+
     if (virXPathLongLong("string(./cputune/quota[1])", ctxt,
                          &def->cputune.quota) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -9684,6 +9692,15 @@ virDomainDefParseXML(virCapsPtr caps,
         goto error;
     }
 
+    if (def->cputune.quota > 0 &&
+        (def->cputune.quota < 1000 ||
+         def->cputune.quota > 18446744073709551)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("Value of cputune quota must be in range "
+                         "[1000, 18446744073709551]"));
+        goto error;
+    }
+
     if (virXPathULongLong("string(./cputune/emulator_period[1])", ctxt,
                           &def->cputune.emulator_period) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -9691,6 +9708,15 @@ virDomainDefParseXML(virCapsPtr caps,
         goto error;
     }
 
+    if (def->cputune.emulator_period > 0 &&
+        (def->cputune.emulator_period < 1000 ||
+         def->cputune.emulator_period > 1000000)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("Value of cputune emulator_period must be in range "
+                         "[1000, 1000000]"));
+        goto error;
+    }
+
     if (virXPathLongLong("string(./cputune/emulator_quota[1])", ctxt,
                          &def->cputune.emulator_quota) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -9698,6 +9724,15 @@ virDomainDefParseXML(virCapsPtr caps,
         goto error;
     }
 
+    if (def->cputune.emulator_quota > 0 &&
+        (def->cputune.emulator_quota < 1000 ||
+         def->cputune.emulator_quota > 18446744073709551)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("Value of cputune emulator_quota must be in range "
+                         "[1000, 18446744073709551]"));
+        goto error;
+    }
+
     if ((n = virXPathNodeSet("./cputune/vcpupin", ctxt, &nodes)) < 0)
         goto error;