]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
* src/xen_internal.c: rewrite of range check in credit scheduler
authorDaniel Veillard <veillard@redhat.com>
Thu, 19 Jul 2007 13:39:26 +0000 (13:39 +0000)
committerDaniel Veillard <veillard@redhat.com>
Thu, 19 Jul 2007 13:39:26 +0000 (13:39 +0000)
  initially suggested by Atsushi SAKAI
Daniel

ChangeLog
src/xen_internal.c

index 4d62d20e8c5c4b8f6f2b26cc27151dbb275365ed..6476171e78ae7ac9985ca52409b94be3c6da6b80 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Jul 19 15:38:44 CEST 2007 Daniel Veillard <veillard@redhat.com>
+
+       * src/xen_internal.c: rewrite of range check in credit scheduler
+         initially suggested by Atsushi SAKAI
+
 Wed Jul 18 17:45:08 EST 2007 Daniel P. Berrange <berrange@redhat.com>
 
        * src/qemu_conf.c: Remove double free of XML property upon
index 545a816e88332913af3a72dccb1771a0db1ca87e..f3bbf812bb7f1fdf3efeec374303f1a1ee47317d 100644 (file)
@@ -1170,6 +1170,7 @@ xenHypervisorSetSchedulerParameters(virDomainPtr domain,
                                 virSchedParameterPtr params, int nparams)
 {
     int i;
+    unsigned int val;
     xenUnifiedPrivatePtr priv;
 
     if ((domain == NULL) || (domain->conn == NULL)) {
@@ -1237,11 +1238,25 @@ xenHypervisorSetSchedulerParameters(virDomainPtr domain,
             for (i = 0; i < nparams; i++) {
                 if (STREQ (params[i].field, str_weight) &&
                     params[i].type == VIR_DOMAIN_SCHED_FIELD_UINT) {
-                    op_dom.u.getschedinfo.u.credit.weight = params[i].value.ui;
+                   val = params[i].value.ui;
+                   if ((val < 1) || (val > USHRT_MAX)) {
+                       virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+       _("Credit scheduler weight parameter (%d) is out of range (1-65535)"),
+                                         val);
+                       return(-1);
+                   }
+                    op_dom.u.getschedinfo.u.credit.weight = val;
                    weight_set = 1;
                } else if (STREQ (params[i].field, str_cap) &&
                     params[i].type == VIR_DOMAIN_SCHED_FIELD_UINT) {
-                    op_dom.u.getschedinfo.u.credit.cap = params[i].value.ui;
+                   val = params[i].value.ui;
+                   if (val > USHRT_MAX) {
+                       virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+       _("Credit scheduler cap parameter (%d) is out of range (0-65535)"),
+                                         val);
+                       return(-1);
+                   }
+                    op_dom.u.getschedinfo.u.credit.cap = val;
                    cap_set = 1;
                } else {
                    virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,