Properly free result of virSocketAddrFormat() and
virBufferContentAndReset().
Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
---
src/network/network_pf.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/network/network_pf.c b/src/network/network_pf.c
index 724b82c054..95f63ac37f 100644
--- a/src/network/network_pf.c
+++ b/src/network/network_pf.c
@@ -171,6 +171,8 @@ pfAddNatFirewallRules(virNetworkDef *def,
g_autoptr(virCommand) flush_cmd = virCommandNew(PFCTL);
virPortRange *portRange = &def->forward.port;
g_autofree char *portRangeStr = NULL;
+ g_autofree char *addr = NULL;
+ g_autofree char *pf_rules = NULL;
if (prefix < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -205,36 +207,39 @@ pfAddNatFirewallRules(virNetworkDef *def,
}
}
+ if (!(addr = virSocketAddrFormat(&ipdef->address)))
+ return -1;
+
virBufferAsprintf(&pf_rules_buf,
"table <natdst> persist { 0.0.0.0/0, ! %s/%d, ! %s, ! %s }\n",
- virSocketAddrFormat(&ipdef->address),
+ addr,
prefix,
networkLocalMulticastIPv4,
networkLocalBroadcast);
virBufferAsprintf(&pf_rules_buf,
"nat pass on %s from %s/%d to <natdst> -> (%s) port %s\n",
forwardIf,
- virSocketAddrFormat(&ipdef->address),
+ addr,
prefix,
forwardIf,
portRangeStr);
virBufferAsprintf(&pf_rules_buf,
"pass quick on %s from %s/%d to %s/%d\n",
def->bridge,
- virSocketAddrFormat(&ipdef->address),
+ addr,
prefix,
- virSocketAddrFormat(&ipdef->address),
+ addr,
prefix);
virBufferAsprintf(&pf_rules_buf,
"pass quick on %s from %s/%d to %s\n",
def->bridge,
- virSocketAddrFormat(&ipdef->address),
+ addr,
prefix,
networkLocalMulticastIPv4);
virBufferAsprintf(&pf_rules_buf,
"pass quick on %s from %s/%d to %s\n",
def->bridge,
- virSocketAddrFormat(&ipdef->address),
+ addr,
prefix,
networkLocalBroadcast);
virBufferAsprintf(&pf_rules_buf,
@@ -246,7 +251,8 @@ pfAddNatFirewallRules(virNetworkDef *def,
virCommandAddArgFormat(cmd, "libvirt/%s", def->name);
virCommandAddArgList(cmd, "-f", "-", NULL);
- virCommandSetInputBuffer(cmd, virBufferContentAndReset(&pf_rules_buf));
+ pf_rules = virBufferContentAndReset(&pf_rules_buf);
+ virCommandSetInputBuffer(cmd, pf_rules);
/* pfctl -a libvirt/default -F all */
/* Flush rules as a separate command, so when it fails, e.g. because the
--
2.52.0
© 2016 - 2026 Red Hat, Inc.