]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: fix inf-loop in blkio parameters
authorEric Blake <eblake@redhat.com>
Wed, 28 Dec 2011 13:53:27 +0000 (06:53 -0700)
committerEric Blake <eblake@redhat.com>
Wed, 28 Dec 2011 13:57:42 +0000 (06:57 -0700)
https://bugzilla.redhat.com/show_bug.cgi?id=770520

We had two nested loops both trying to use 'i' as the iteration
variable, which can result in an infinite loop when the inner
loop interferes with the outer loop.  Introduced in commit 93ab585.

* src/qemu/qemu_driver.c (qemuDomainSetBlkioParameters): Don't
reuse iteration variable across two loops.

src/qemu/qemu_driver.c

index eeeb9353b57a2782b62eebe56fff99e060263081..a840c1f9583adae6409cdb662a2f8b2faea62cba 100644 (file)
@@ -5982,6 +5982,8 @@ static int qemuDomainSetBlkioParameters(virDomainPtr dom,
             } else if (STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT)) {
                 size_t ndevices;
                 virBlkioDeviceWeightPtr devices = NULL;
+                int j;
+
                 if (param->type != VIR_TYPED_PARAM_STRING) {
                     qemuReportError(VIR_ERR_INVALID_ARG, "%s",
                                     _("invalid type for device_weight tunable, "
@@ -5996,19 +5998,19 @@ static int qemuDomainSetBlkioParameters(virDomainPtr dom,
                     ret = -1;
                     continue;
                 }
-                for (i = 0; i < ndevices; i++) {
+                for (j = 0; j < ndevices; i++) {
                     rc = virCgroupSetBlkioDeviceWeight(group,
-                                                       devices[i].path,
-                                                       devices[i].weight);
+                                                       devices[j].path,
+                                                       devices[j].weight);
                     if (rc < 0) {
                         virReportSystemError(-rc,
                                              _("Unable to set io device weight "
                                                "for path %s"),
-                                             devices[i].path);
+                                             devices[j].path);
                         break;
                     }
                 }
-                if (i != ndevices) {
+                if (j != ndevices) {
                     ret = -1;
                     continue;
                 }