]> git.itanic.dy.fi Git - rrdd/commitdiff
network_parser: Fix fd leak due to missing close after connect() fail
authorTimo Kokkonen <timo.t.kokkonen@iki.fi>
Sun, 25 Oct 2020 16:07:16 +0000 (18:07 +0200)
committerTimo Kokkonen <timo.t.kokkonen@iki.fi>
Sun, 25 Oct 2020 16:07:16 +0000 (18:07 +0200)
If connect() fails, we still have the socket and it must be closed
that was created when we call socket() earlier.

Signed-off-by: Timo Kokkonen <timo.t.kokkonen@iki.fi>
network_parser.c

index 0e8475a2b503f9661c3dd4dce4a35bc294839c99..7e2b95e8bf0ab3cd4d8f90e13932207399638726 100644 (file)
@@ -207,7 +207,7 @@ static int network_multi_parser(char ***rrd_data, const char **parser_data,
        ret = connect(data->fd, (struct sockaddr *)&data->addr, sizeof(data->addr));
        if (ret < 0) {
                pr_err("Failed to connect to %s: %m\n", data_addrstr(data));
-               return -1;
+               goto out_close_noderegister;
        }
 
        /* Send the last update timestamp to every host */
@@ -275,6 +275,7 @@ out_close:
         */
        if (data->fd != -1) {
                register_event_handler(&data->ev, EPOLL_CTL_DEL);
+out_close_noderegister:
                close(data->fd);
                data->fd = -1;
        }