[libvirt] [PATCH 4/5] lxc: Don't leak @veths in virLXCProcessStart

Michal Privoznik posted 5 patches 7 years, 6 months ago
[libvirt] [PATCH 4/5] lxc: Don't leak @veths in virLXCProcessStart
Posted by Michal Privoznik 7 years, 6 months ago
The individual strings are freed, but the array is never freed.

 8 bytes in 1 blocks are definitely lost in loss record 28 of 1,098
    at 0x4C2CE3F: malloc (vg_replace_malloc.c:298)
    by 0x4C2F1BF: realloc (vg_replace_malloc.c:785)
    by 0x52C9C92: virReallocN (viralloc.c:245)
    by 0x52C9D88: virExpandN (viralloc.c:294)
    by 0x23414D99: virLXCProcessSetupInterfaces (lxc_process.c:552)
    by 0x23417457: virLXCProcessStart (lxc_process.c:1356)
    by 0x2341F71C: lxcDomainCreateWithFiles (lxc_driver.c:1088)
    by 0x2341F805: lxcDomainCreate (lxc_driver.c:1123)
    by 0x55917EB: virDomainCreate (libvirt-domain.c:6534)
    by 0x1367D1: remoteDispatchDomainCreate (remote_daemon_dispatch_stubs.h:4434)
    by 0x1366EA: remoteDispatchDomainCreateHelper (remote_daemon_dispatch_stubs.h:4410)
    by 0x546FDF1: virNetServerProgramDispatchCall (virnetserverprogram.c:437)

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 src/lxc/lxc_process.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index 14502e12fe..3e44da1aaf 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -1559,6 +1559,7 @@ int virLXCProcessStart(virConnectPtr conn,
     virCommandFree(cmd);
     for (i = 0; i < nveths; i++)
         VIR_FREE(veths[i]);
+    VIR_FREE(veths);
     for (i = 0; i < nttyFDs; i++)
         VIR_FORCE_CLOSE(ttyFDs[i]);
     VIR_FREE(ttyFDs);
-- 
2.16.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 4/5] lxc: Don't leak @veths in virLXCProcessStart
Posted by Erik Skultety 7 years, 6 months ago
On Wed, Jul 25, 2018 at 03:02:10PM +0200, Michal Privoznik wrote:
> The individual strings are freed, but the array is never freed.
>
>  8 bytes in 1 blocks are definitely lost in loss record 28 of 1,098
>     at 0x4C2CE3F: malloc (vg_replace_malloc.c:298)
>     by 0x4C2F1BF: realloc (vg_replace_malloc.c:785)
>     by 0x52C9C92: virReallocN (viralloc.c:245)
>     by 0x52C9D88: virExpandN (viralloc.c:294)
>     by 0x23414D99: virLXCProcessSetupInterfaces (lxc_process.c:552)
>     by 0x23417457: virLXCProcessStart (lxc_process.c:1356)
>     by 0x2341F71C: lxcDomainCreateWithFiles (lxc_driver.c:1088)
>     by 0x2341F805: lxcDomainCreate (lxc_driver.c:1123)
>     by 0x55917EB: virDomainCreate (libvirt-domain.c:6534)
>     by 0x1367D1: remoteDispatchDomainCreate (remote_daemon_dispatch_stubs.h:4434)
>     by 0x1366EA: remoteDispatchDomainCreateHelper (remote_daemon_dispatch_stubs.h:4410)
>     by 0x546FDF1: virNetServerProgramDispatchCall (virnetserverprogram.c:437)
>
> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
> ---
>  src/lxc/lxc_process.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
> index 14502e12fe..3e44da1aaf 100644
> --- a/src/lxc/lxc_process.c
> +++ b/src/lxc/lxc_process.c
> @@ -1559,6 +1559,7 @@ int virLXCProcessStart(virConnectPtr conn,
>      virCommandFree(cmd);
>      for (i = 0; i < nveths; i++)
>          VIR_FREE(veths[i]);
> +    VIR_FREE(veths);

Hmm, I'll use this patch to promote the recent (ongoing) work on
__attribute__(cleanup), would you mind converting veths into a NULL-terminated
list so that we could use VIR_AUTOPTR(virString) veths = NULL and thus drop the
manual cleanup? Bonus points if you add a follow-up patch.

Reviewed-by: Erik Skultety <eskultet@redhat.com>

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list