From be1e745cd27eb7c426df49bf748886b575698502 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Fri, 14 Jun 2024 12:52:54 +0200 Subject: [PATCH] virfirewall: Fir a memleak in virFirewallParseXML() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit As a part of parsing XML, virFirewallParseXML() calls virXMLNodeContentString() and then passes the return value further. But virXMLNodeContentString() is documented so that it's the caller's responsibility to free the returned string, which virFirewallParseXML() never does. This leads to a memory leak: 14,300 bytes in 220 blocks are definitely lost in loss record 1,879 of 1,891 at 0x4841858: malloc (vg_replace_malloc.c:442) by 0x5491E3C: xmlBufCreateSize (in /usr/lib64/libxml2.so.2.12.6) by 0x54C2401: xmlNodeGetContent (in /usr/lib64/libxml2.so.2.12.6) by 0x49F7791: virXMLNodeContentString (virxml.c:354) by 0x4979F25: virFirewallParseXML (virfirewall.c:1134) by 0x4ABEB1E: virNetworkLoadState (virnetworkobj.c:938) by 0x4ABF35C: virNetworkObjLoadAllState (virnetworkobj.c:1072) by 0x4E9A25E: networkStateInitialize (bridge_driver.c:624) by 0x4CB1FA6: virStateInitialize (libvirt.c:665) by 0x15A6C6: daemonRunStateInit (remote_daemon.c:611) by 0x49E69F0: virThreadHelper (virthread.c:256) by 0x532B428: start_thread (in /lib64/libc.so.6) Signed-off-by: Michal Privoznik Reviewed-by: Daniel P. Berrangé --- src/util/virfirewall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c index 090dbcdbed..811b787ecc 100644 --- a/src/util/virfirewall.c +++ b/src/util/virfirewall.c @@ -1137,7 +1137,7 @@ virFirewallParseXML(virFirewall **firewall, NULL, NULL, NULL); for (i = 0; i < nargs; i++) { - char *arg = virXMLNodeContentString(argsNodes[i]); + g_autofree char *arg = virXMLNodeContentString(argsNodes[i]); if (!arg) return -1; -- 2.47.2