[PATCH 0/3] bhyve: fix a few memory leaks
Roman Bogorodskiy (3): bhyve: fix memory leak in bhyveBuildVirtioSerialControllerArgStr() network: pf: fix memory leaks bhyve: fix memory leak in bhyveStateCleanup() src/bhyve/bhyve_command.c | 4 +++- src/bhyve/bhyve_driver.c | 1 + src/network/network_pf.c | 20 +++++++++++++------- 3 files changed, 17 insertions(+), 8 deletions(-) -- 2.52.0
We cannot use virBufferContentAndReset() right in virCommandAddArgFormat() as we need to free the result. Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com> --- src/bhyve/bhyve_command.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 941b48eb66..a4f9c8823b 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -518,10 +518,12 @@ bhyveBuildVirtioSerialControllerArgStr(const virDomainDef *def, } if (virBufferUse(&opt) > 0) { + g_autofree char *console_opt = virBufferContentAndReset(&opt); + virCommandAddArg(cmd, "-s"); virCommandAddArgFormat(cmd, "%d:0,virtio-console%s", controller->info.addr.pci.slot, - virBufferContentAndReset(&opt)); + console_opt); } return 0; -- 2.52.0
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
Add missing freeing of 'bhyve_driver->pidfile'. Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com> --- src/bhyve/bhyve_driver.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index a0d97d3f86..8628a48621 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1379,6 +1379,7 @@ bhyveStateCleanup(void) virPidFileRelease(BHYVE_STATE_DIR, "driver", bhyve_driver->lockFD); virMutexDestroy(&bhyve_driver->lock); + VIR_FREE(bhyve_driver->pidfile); VIR_FREE(bhyve_driver); return 0; -- 2.52.0
On a Friday in 2026, Roman Bogorodskiy wrote:
Roman Bogorodskiy (3): bhyve: fix memory leak in bhyveBuildVirtioSerialControllerArgStr() network: pf: fix memory leaks bhyve: fix memory leak in bhyveStateCleanup()
src/bhyve/bhyve_command.c | 4 +++- src/bhyve/bhyve_driver.c | 1 + src/network/network_pf.c | 20 +++++++++++++------- 3 files changed, 17 insertions(+), 8 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
participants (2)
-
Ján Tomko -
Roman Bogorodskiy