[libvirt] [PATCH] qemu: fix inf-loop in blkio parameters

Daniel Veillard veillard at redhat.com
Thu Dec 29 02:00:48 UTC 2011


On Wed, Dec 28, 2011 at 06:57:34AM -0700, Eric Blake wrote:
> 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.
> ---
> 
> Pushing under the trivial rule.
> 
>  src/qemu/qemu_driver.c |   12 +++++++-----
>  1 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index eeeb935..a840c1f 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -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;
>                  }

  Oops ! Good catch !

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list