When no error is reported in the first iov, do not prematurely return,
but process further iovs. This fixes batch processing.

Fixes: c60389e4f9ea ("libnetlink: fix leak and using unused memory on error")
Signed-off-by: Petr Machata <pe...@mellanox.com>
---
 lib/libnetlink.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index c0b80ed..9545710 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -763,6 +763,7 @@ static int __rtnl_talk_iov(struct rtnl_handle *rtnl, struct 
iovec *iov,
        msg.msg_iovlen = 1;
        i = 0;
        while (1) {
+next:
                status = rtnl_recvmsg(rtnl->fd, &msg, &buf);
                ++i;
 
@@ -826,6 +827,8 @@ static int __rtnl_talk_iov(struct rtnl_handle *rtnl, struct 
iovec *iov,
                                else
                                        free(buf);
 
+                               if (i < iovlen)
+                                       goto next;
                                return error ? -i : 0;
                        }
 
-- 
2.4.11

Reply via email to