]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip address: Fix memory leak when specifying device
authorBenjamin Poirier <bpoirier@nvidia.com>
Sun, 10 Jul 2022 23:52:50 +0000 (08:52 +0900)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 18 Jul 2022 16:46:24 +0000 (09:46 -0700)
Running a command like `ip addr show dev lo` under valgrind informs us that

32,768 bytes in 1 blocks are definitely lost in loss record 4 of 4
   at 0x483577F: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x16CBE2: rtnl_recvmsg (libnetlink.c:775)
   by 0x16CF04: __rtnl_talk_iov (libnetlink.c:954)
   by 0x16E257: __rtnl_talk (libnetlink.c:1059)
   by 0x16E257: rtnl_talk (libnetlink.c:1065)
   by 0x115CB1: ipaddr_link_get (ipaddress.c:1833)
   by 0x11A0D1: ipaddr_list_flush_or_save (ipaddress.c:2030)
   by 0x1152EB: do_cmd (ip.c:115)
   by 0x114D6F: main (ip.c:321)

After calling store_nlmsg(), the original buffer should be freed. That is
the pattern used elsewhere through the rtnl_dump_filter() call chain.

Fixes: 884709785057 ("ip address: Set device index in dump request")
Reported-by: Binu Gopalakrishnapillai <binug@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Benjamin Poirier <bpoirier@nvidia.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
ip/ipaddress.c

index a288341c2411735119a5ee6b5c65f5d4607f8279..59ef1e4b5f31392cfb6d2900531bdf563ce90a72 100644 (file)
@@ -2030,8 +2030,10 @@ static int ipaddr_link_get(int index, struct nlmsg_chain *linfo)
 
        if (store_nlmsg(answer, linfo) < 0) {
                fprintf(stderr, "Failed to process link information\n");
+               free(answer);
                return 1;
        }
+       free(answer);
 
        return 0;
 }