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
