[PATCH 03/28] batctl: free header lines after error

Sven Eckelmann <[email protected]> Sun, 21 Jun 2026 16:23:53 +0200
Newsgroups org.open-mesh.lists.batman
Message-ID <[email protected]>
If the common netlink helper or the routing algorithm code never printed
the header, nothing would clean up the remaining_headers. Explicitly free
it up to avoid a minor memory leak.

Fixes: 5401c71adfad ("batctl: Use debugfs fallback when netlink not supported")
Signed-off-by: Sven Eckelmann <[email protected]>
---
 netlink.c      | 4 ++++
 routing_algo.c | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/netlink.c b/netlink.c
index 9d3d3c6..1121956 100644
--- a/netlink.c
+++ b/netlink.c
@@ -589,6 +589,10 @@ int netlink_print_common(struct state *state, char *orig_iface, int read_opt,
 
 	} while (!last_err && read_opt & (CONT_READ | CLR_CONT_READ));
 
+	/* free a header that was prepared but never printed (e.g. on error) */
+	free(opts.remaining_header);
+	opts.remaining_header = NULL;
+
 	bat_hosts_free();
 
 	return last_err;
diff --git a/routing_algo.c b/routing_algo.c
index c3f4580..1c2c2b4 100644
--- a/routing_algo.c
+++ b/routing_algo.c
@@ -108,8 +108,12 @@ static int print_routing_algos(struct state *state)
 
 	nl_recvmsgs(state->sock, cb);
 
-	if (!last_err)
+	if (!last_err) {
 		netlink_print_remaining_header(&opts);
+	} else {
+		free(opts.remaining_header);
+		opts.remaining_header = NULL;
+	}
 
 	return last_err;
 }

-- 
2.47.3