]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: Test return of fcntl in agentx.c
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 31 Jan 2020 15:44:23 +0000 (10:44 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 4 Feb 2020 13:10:52 +0000 (08:10 -0500)
The agentx.c code was calling fcntl but not testing return
code and handling it, thus making SA unhappy.

Fix.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/agentx.c

index 2c6a43d1a7d5b2b8a66c0cd2b5eca6833dd0bd90..b479b5ea4c78720d7c510523770994a110ffd69d 100644 (file)
@@ -55,28 +55,42 @@ static int agentx_timeout(struct thread *t)
 static int agentx_read(struct thread *t)
 {
        fd_set fds;
-       int flags;
+       int flags, new_flags = 0;
        int nonblock = false;
        struct listnode *ln = THREAD_ARG(t);
        list_delete_node(events, ln);
 
        /* fix for non blocking socket */
        flags = fcntl(THREAD_FD(t), F_GETFL, 0);
-       if (-1 == flags)
+       if (-1 == flags) {
+               flog_err(EC_LIB_SYSTEM_CALL, "Failed to get FD settings fcntl: %s(%d)",
+                        strerror(errno), errno);
                return -1;
+       }
 
        if (flags & O_NONBLOCK)
                nonblock = true;
        else
-               fcntl(THREAD_FD(t), F_SETFL, flags | O_NONBLOCK);
+               new_flags = fcntl(THREAD_FD(t), F_SETFL, flags | O_NONBLOCK);
+
+       if (new_flags == -1)
+               flog_err(EC_LIB_SYSTEM_CALL, "Failed to set snmp fd non blocking: %s(%d)",
+                        strerror(errno), errno);
 
        FD_ZERO(&fds);
        FD_SET(THREAD_FD(t), &fds);
        snmp_read(&fds);
 
        /* Reset the flag */
-       if (!nonblock)
-               fcntl(THREAD_FD(t), F_SETFL, flags);
+       if (!nonblock) {
+               new_flags = fcntl(THREAD_FD(t), F_SETFL, flags);
+
+               if (new_flags == -1)
+                       flog_err(
+                               EC_LIB_SYSTEM_CALL,
+                               "Failed to set snmp fd back to original settings: %s(%d)",
+                               strerror(errno), errno);
+       }
 
        netsnmp_check_outstanding_agent_requests();
        agentx_events_update();