Calling FD_SET() in between return of select() and call to FD_ISSET()
effectively renders the whole thing useless: FD_ISSET() will always
return true no matter what select() actually did.

Fixes: a72315d2bad47 ("src: add rule batching support")
Signed-off-by: Phil Sutter <[email protected]>
---
 src/mnl.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mnl.c b/src/mnl.c
index f6363560721c1..492d7517d40e2 100644
--- a/src/mnl.c
+++ b/src/mnl.c
@@ -300,12 +300,12 @@ int mnl_batch_talk(struct netlink_ctx *ctx, struct 
list_head *err_list)
                        err = -1;
                }
 
+               FD_ZERO(&readfds);
+               FD_SET(fd, &readfds);
+
                ret = select(fd+1, &readfds, NULL, NULL, &tv);
                if (ret == -1)
                        return -1;
-
-               FD_ZERO(&readfds);
-               FD_SET(fd, &readfds);
        }
        return err;
 }
-- 
2.21.0

Reply via email to