Fix: relayd: unchecked return value when opening relay socket
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 18 Feb 2020 00:32:54 +0000 (19:32 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 19 Feb 2020 22:47:41 +0000 (17:47 -0500)
fd_tracker_open_unsuspendable_fd may fail because the underlying
socket() call fails or there may be too many open file descriptors at
the time of the call. In both cases, these errors must be logged and
handled.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I8b8c4fcc9de08746a91778b58c74b2118e98667b

src/bin/lttng-relayd/main.c

index cbd9e9cc70bc8733e7f82dc59d21b29651524ae2..7f7c0369a1bbf935b3ce66b46d36cf94bfeaa9b6 100644 (file)
@@ -1022,7 +1022,11 @@ static struct lttcomm_sock *relay_socket_create(struct lttng_uri *uri,
        ret = fd_tracker_open_unsuspendable_fd(the_fd_tracker, &sock_fd,
                        (const char **) (formated_name ? &formated_name : NULL),
                        1, create_sock, sock);
-       free(formated_name);
+       if (ret) {
+               PERROR("Failed to open \"%s\" relay socket",
+                               formated_name ?: "Unknown");
+               goto error;
+       }
        DBG("Listening on %s socket %d", name, sock->fd);
 
        ret = sock->ops->bind(sock);
@@ -1037,12 +1041,14 @@ static struct lttcomm_sock *relay_socket_create(struct lttng_uri *uri,
 
        }
 
+       free(formated_name);
        return sock;
 
 error:
        if (sock) {
                lttcomm_destroy_sock(sock);
        }
+       free(formated_name);
        return NULL;
 }
 
This page took 0.026884 seconds and 4 git commands to generate.