aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Fedoryshchenko <nuclearcat@nuclearcat.com>2023-02-11 01:46:37 +0200
committerStephen Hemminger <stephen@networkplumber.org>2023-02-17 17:37:48 -0800
commit6d25be27cc2976ff1180a7ad27df57827ec162fa (patch)
tree33a7d0b9ee568edcf69740ad8d0f912710c443ae
parent890c599ec2e8905e7b8a433be3646d5d34901810 (diff)
downloadiproute2-6d25be27cc2976ff1180a7ad27df57827ec162fa.tar.gz
libnetlink.c: Fix memory leak in batch mode
During testing we noticed significant memory leak that is easily reproducible and detectable with valgrind: ==2006284== 393,216 bytes in 12 blocks are definitely lost in loss record 5 of 5 ==2006284== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==2006284== by 0x18C73E: rtnl_recvmsg (libnetlink.c:830) ==2006284== by 0x18CF9E: __rtnl_talk_iov (libnetlink.c:1032) ==2006284== by 0x18D3CE: __rtnl_talk (libnetlink.c:1140) ==2006284== by 0x18D4DE: rtnl_talk (libnetlink.c:1168) ==2006284== by 0x11BF04: tc_filter_modify (tc_filter.c:224) ==2006284== by 0x11DD70: do_filter (tc_filter.c:748) ==2006284== by 0x116B06: do_cmd (tc.c:210) ==2006284== by 0x116C7C: tc_batch_cmd (tc.c:231) ==2006284== by 0x1796F2: do_batch (utils.c:1701) ==2006284== by 0x116D05: batch (tc.c:246) ==2006284== by 0x117327: main (tc.c:331) ==2006284== ==2006284== LEAK SUMMARY: ==2006284== definitely lost: 884,736 bytes in 27 blocks In case nlmsg_type == NLMSG_ERROR and if answer set to NULL, we should free(buf) too. Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
-rw-r--r--lib/libnetlink.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index c89760436..68360b0f4 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -1099,6 +1099,8 @@ next:
if (answer)
*answer = (struct nlmsghdr *)buf;
+ else
+ free(buf);
return 0;
}