]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
netlink: fix socket leak on some error condition
authorVincent Bernat <vincent@bernat.ch>
Sun, 21 Mar 2021 10:00:59 +0000 (11:00 +0100)
committerVincent Bernat <vincent@bernat.ch>
Sun, 21 Mar 2021 10:00:59 +0000 (11:00 +0100)
src/daemon/netlink.c

index 5c89ade9df386874871bb59bf68426eee5344fe9..1e6013af42382e2178932652747fb90db30952e6 100644 (file)
@@ -109,13 +109,17 @@ netlink_connect(struct lldpd *cfg, int protocol, unsigned groups)
        }
        if (NETLINK_SEND_BUFSIZE &&
            netlink_socket_set_buffer_size(s,
-           SO_SNDBUF, "SO_SNDBUF", NETLINK_SEND_BUFSIZE) == -1)
+           SO_SNDBUF, "SO_SNDBUF", NETLINK_SEND_BUFSIZE) == -1) {
+               close(s);
                return -1;
+       }
 
        int rc = netlink_socket_set_buffer_size(s,
            SO_RCVBUF, "SO_RCVBUF", NETLINK_RECEIVE_BUFSIZE);
        switch (rc) {
-       case -1: return -1;
+       case -1:
+               close(s);
+               return -1;
        case -2: cfg->g_netlink->nl_socket_recv_size = 0; break;
        default: cfg->g_netlink->nl_socket_recv_size = rc; break;
        }