netlink_print_common() clears last_err to 0 before each dump and then
ignores the return value of nl_recvmsgs(). It will therefore only print
errors which were received in netlink messages - but not the major errors
when communicating with the kernel.

Capture the nl_recvmsgs() return value, matching the sibling helper
netlink_query_common().

Fixes: d8dd1ff1a0fe ("batctl: Use netlink to replace some of debugfs")
Signed-off-by: Sven Eckelmann <[email protected]>
---
 netlink.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/netlink.c b/netlink.c
index e8b41cf..6e0d35a 100644
--- a/netlink.c
+++ b/netlink.c
@@ -537,6 +537,7 @@ int netlink_print_common(struct state *state, char 
*orig_iface, int read_opt,
        };
        int hardifindex = 0;
        struct nl_msg *msg;
+       int ret;
 
        if (!state->sock) {
                last_err = -EOPNOTSUPP;
@@ -588,7 +589,9 @@ int netlink_print_common(struct state *state, char 
*orig_iface, int read_opt,
                nlmsg_free(msg);
 
                last_err = 0;
-               nl_recvmsgs(state->sock, state->cb);
+               ret = nl_recvmsgs(state->sock, state->cb);
+               if (ret < 0)
+                       last_err = -EIO;
 
                /* the header should still be printed when no entry was 
received */
                if (!last_err)

-- 
2.47.3

Reply via email to