[libvirt] [PATCH] LXC: fix memory leak in lxcContainerGetSubtree

Osier Yang jyang at redhat.com
Tue Jun 12 07:01:34 UTC 2012


On 2012年06月12日 14:31, Gao feng wrote:
> when libvirt_lxc trigger oom error in lxcContainerGetSubtree
> we should free the alloced memory for mounts.
>
> so when lxcContainerGetSubtree failed,we should do some
> memory cleanup in lxcContainerUnmountSubtree.
>
> Signed-off-by: Gao feng<gaofeng at cn.fujitsu.com>
> ---
>   src/lxc/lxc_container.c |   10 +++++-----
>   1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
> index 5651255..633218c 100644
> --- a/src/lxc/lxc_container.c
> +++ b/src/lxc/lxc_container.c
> @@ -1118,10 +1118,11 @@ static int lxcContainerGetSubtree(const char *prefix,
>               virReportOOMError();
>               goto cleanup;
>           }
> -        if (!(mounts[nmounts++] = strdup(mntent.mnt_dir))) {
> +        if (!(mounts[nmounts] = strdup(mntent.mnt_dir))) {

Good catch.

>               virReportOOMError();
>               goto cleanup;
>           }
> +	nmounts++;
>           VIR_DEBUG("Grabbed %s", mntent.mnt_dir);
>       }
>
> @@ -1129,11 +1130,10 @@ static int lxcContainerGetSubtree(const char *prefix,
>           qsort(mounts, nmounts, sizeof(mounts[0]),
>                 lxcContainerChildMountSort);
>
> -    *mountsret = mounts;
> -    *nmountsret = nmounts;
>       ret = 0;
> -
>   cleanup:
> +    *mountsret = mounts;
> +    *nmountsret = nmounts;
>       endmntent(procmnt);
>       return ret;
>   }
> @@ -1151,7 +1151,7 @@ static int lxcContainerUnmountSubtree(const char *prefix,
>       VIR_DEBUG("Unmount subtreee from %s", prefix);
>
>       if (lxcContainerGetSubtree(prefix,&mounts,&nmounts)<  0)
> -        return -1;
> +        goto cleanup;
>       for (i = 0 ; i<  nmounts ; i++) {
>           VIR_DEBUG("Umount %s", mounts[i]);
>           if (umount(mounts[i])<  0) {


Right fix, and ACK.

Osier




More information about the libvir-list mailing list