[libvirt] [PATCH] openvz_driver.c: avoid leak on OOM error path

Matthias Bolte matthias.bolte at googlemail.com
Mon Feb 15 17:49:39 UTC 2010


2010/2/15 Jim Meyering <jim at meyering.net>:
> It looks like openvzFreeDriver cannot call VIR_FREE on its buffer
> argument, because of the use in the function that just happens to
> be a few lines below.  These are the only two uses of openvzFreeDriver.
>
>
> >From 0a616cd03cca9c9d89f23dadd52cd23c30789aca Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering at redhat.com>
> Date: Mon, 15 Feb 2010 18:33:38 +0100
> Subject: [PATCH] openvz_driver.c: avoid leak on OOM error path
>
> * src/openvz/openvz_driver.c (openvzOpen): Free "driver" buffer
> upon failure.
> ---
>  src/openvz/openvz_driver.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
> index 68d0398..3a8a82f 100644
> --- a/src/openvz/openvz_driver.c
> +++ b/src/openvz/openvz_driver.c
> @@ -1245,22 +1245,23 @@ static virDrvOpenStatus openvzOpen(virConnectPtr conn,
>         goto cleanup;
>
>     if (openvzExtractVersion(conn, driver) < 0)
>         goto cleanup;
>
>     conn->privateData = driver;
>
>     return VIR_DRV_OPEN_SUCCESS;
>
>  cleanup:
>     openvzFreeDriver(driver);
> +    VIR_FREE(driver);
>     return VIR_DRV_OPEN_ERROR;
>  };
>
>  static int openvzClose(virConnectPtr conn) {
>     struct openvz_driver *driver = conn->privateData;
>
>     openvzFreeDriver(driver);
>     conn->privateData = NULL;
>
>     return 0;
>  }
> --
> 1.7.0.181.g41533
>

Why do you think openvzFreeDriver must not VIR_FREE the driver object?
The driver object is allocated per connection in openvzOpen, so
openvzClose has to VIR_FREE it.

Matthias




More information about the libvir-list mailing list