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 isstatic 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.