Thread (5 messages) 5 messages, 4 authors, 2024-03-16

Re: [net/netlink] Question about potential memleak in netlink_proto_init()

From: Kuniyuki Iwashima <hidden>
Date: 2024-03-15 00:55:17

From: Chenyuan Yang <redacted>
Date: Thu, 14 Mar 2024 19:47:18 -0500
Dear Netlink Developers,

We are curious whether the function `netlink_proto_init()` might have a memory leak.

The function is https://elixir.bootlin.com/linux/v6.8/source/net/netlink/af_netlink.c#L2908
and the relevant code is
static int __init netlink_proto_init(void)
{
	int i;
  ...

	for (i = 0; i < MAX_LINKS; i++) {
		if (rhashtable_init(&nl_table[i].hash,
				    &netlink_rhashtable_params) < 0) {
			while (--i > 0)
				rhashtable_destroy(&nl_table[i].hash);
			kfree(nl_table);
			goto panic;
If rhashtable_init() fails, the kernel panic occurs, so there's
no real memleak issue.

		}
	}
  ...
}
In the for loop, when `rhashtable_init()` fails, the function will free
the allocated memory for `nl_table[i].hash` by checking `while (--i > 0)`.
However, the first element (`i=1`) of `nl_table` is not freed since `i` is
decremented before the check.

Based on our understanding, a possible fix would be
-      while (--i > 0)
+      while (--i >= 0)

Change itself looks good, no need for cleanup in the first place though.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help