From: Jakub Kicinski Date: Wed, 9 Oct 2024 18:21:54 +0000 (-0700) Subject: ip: netconf: fix overzealous error checking X-Git-Tag: v6.12.0~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6887a0656dad7bb826deea6242f4d7462ee96014;p=thirdparty%2Fiproute2.git ip: netconf: fix overzealous error checking The rtnetlink.sh kernel test started reporting errors after iproute2 update. The error checking introduced by commit under fixes is incorrect. rtnl_listen() always returns an error, because the only way to break the loop is to return an error from the handler, it seems. Switch this code to using normal rtnl_talk(), instead of the rtnl_listen() abuse. As far as I can tell the use of rtnl_listen() was to make get and dump use common handling but that's no longer the case, anyway. Before: $ ip -6 netconf show dev lo inet6 lo forwarding off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off $ echo $? 2 After: $ ./ip/ip -6 netconf show dev lo inet6 lo forwarding off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off $ echo $? 0 Fixes: 00e8a64dac3b ("ip: detect errors in netconf monitor mode") Signed-off-by: Jakub Kicinski Signed-off-by: Stephen Hemminger --- diff --git a/ip/ipnetconf.c b/ip/ipnetconf.c index 77147eb6..cf27e7e3 100644 --- a/ip/ipnetconf.c +++ b/ip/ipnetconf.c @@ -187,16 +187,16 @@ static int do_show(int argc, char **argv) ll_init_map(&rth); if (filter.ifindex && filter.family != AF_UNSPEC) { + struct nlmsghdr *answer; + req.ncm.ncm_family = filter.family; addattr_l(&req.n, sizeof(req), NETCONFA_IFINDEX, &filter.ifindex, sizeof(filter.ifindex)); - if (rtnl_send(&rth, &req.n, req.n.nlmsg_len) < 0) { - perror("Can not send request"); - exit(1); - } - if (rtnl_listen(&rth, print_netconf, stdout) < 0) + if (rtnl_talk(&rth, &req.n, &answer) < 0) exit(2); + + print_netconf2(answer, stdout); } else { rth.flags = RTNL_HANDLE_F_SUPPRESS_NLERR; dump: