From: Michal Privoznik <[email protected]>

Allocated in virNWFilterObjListCollect(), the @objs is an array
of pointers to virNWFilterObj. While individual objects have
their refcounter decremented (in case of failure), the array
itself is never freed leading to a memory leak:

==272308== 192 bytes in 1 blocks are definitely lost in loss record 3,158 of 
3,320
==272308==    at 0x491262B: calloc (vg_replace_malloc.c:1616)
==272308==    by 0x500B721: g_malloc0 (gmem.c:133)
==272308==    by 0x4AEC4C5: virNWFilterObjListCollect (virnwfilterobj.c:501)
==272308==    by 0x4AEC599: virNWFilterObjListExport (virnwfilterobj.c:529)
==272308==    by 0x1968A77C: nwfilterConnectListAllNWFilters 
(nwfilter_driver.c:500)
==272308==    by 0x4D2A4E4: virConnectListAllNWFilters (libvirt-nwfilter.c:102)
==272308==    by 0x402326B: remoteDispatchConnectListAllNWFilters 
(remote_daemon_dispatch_stubs.h:1775)

Signed-off-by: Michal Privoznik <[email protected]>
---
 src/conf/virnwfilterobj.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c
index 6456add593..22c7864c07 100644
--- a/src/conf/virnwfilterobj.c
+++ b/src/conf/virnwfilterobj.c
@@ -554,6 +554,7 @@ virNWFilterObjListExport(virConnectPtr conn,
     VIR_FREE(tmp_filters);
     for (i = 0; i < nfilters; i++)
         virNWFilterObjUnlock(objs[i]);
+    VIR_FREE(objs);
     return ret;
 }
 
-- 
2.56.0

Reply via email to