diff mbox series

[iproute2] ip: netconf: fix overzealous error checking

Message ID 20241009182154.1784675-1-kuba@kernel.org (mailing list archive)
State Accepted
Commit 6887a0656dad7bb826deea6242f4d7462ee96014
Delegated to: Stephen Hemminger
Headers show
Series [iproute2] ip: netconf: fix overzealous error checking | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Jakub Kicinski Oct. 9, 2024, 6:21 p.m. UTC
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 <kuba@kernel.org>
---
We're also missing opening a JSON object here, but I'll send
that fix separately, to -next?
---
 ip/ipnetconf.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org Oct. 11, 2024, 6:32 p.m. UTC | #1
Hello:

This patch was applied to iproute2/iproute2.git (main)
by Stephen Hemminger <stephen@networkplumber.org>:

On Wed,  9 Oct 2024 11:21:54 -0700 you wrote:
> 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.
> 
> [...]

Here is the summary with links:
  - [iproute2] ip: netconf: fix overzealous error checking
    https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=6887a0656dad

You are awesome, thank you!
diff mbox series

Patch

diff --git a/ip/ipnetconf.c b/ip/ipnetconf.c
index 77147eb69097..cf27e7e30a5a 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: