[lttng-dev] [PATCH lttng-tools] Fix: FD leak in accept error handling
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Sat Sep 27 19:49:22 EDT 2014
*** CID 1241799: Resource leak (RESOURCE_LEAK)
/src/common/sessiond-comm/inet.c: 324 in lttcomm_accept_inet_sock()
318
319 end:
320 return new_sock;
321
322 error:
323 free(new_sock);
>>> CID 1241799: Resource leak (RESOURCE_LEAK)
>>> Handle variable "new_fd" going out of scope leaks the handle.
324 return NULL;
325 }
326
327 /*
328 * Make the socket listen using LTTNG_SESSIOND_COMM_MAX_LISTEN.
329 */
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
---
src/common/sessiond-comm/inet.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/common/sessiond-comm/inet.c b/src/common/sessiond-comm/inet.c
index cf06ecb..4e34ad0 100644
--- a/src/common/sessiond-comm/inet.c
+++ b/src/common/sessiond-comm/inet.c
@@ -272,7 +272,7 @@ error_connect:
LTTNG_HIDDEN
struct lttcomm_sock *lttcomm_accept_inet_sock(struct lttcomm_sock *sock)
{
- int new_fd;
+ int new_fd, closeret;
socklen_t len;
struct lttcomm_sock *new_sock;
unsigned long timeout;
@@ -305,10 +305,18 @@ struct lttcomm_sock *lttcomm_accept_inet_sock(struct lttcomm_sock *sock)
ret = lttcomm_setsockopt_rcv_timeout(new_fd, timeout);
if (ret) {
+ closeret = close(new_fd);
+ if (closeret) {
+ PERROR("close");
+ }
goto error;
}
ret = lttcomm_setsockopt_snd_timeout(new_fd, timeout);
if (ret) {
+ closeret = close(new_fd);
+ if (closeret) {
+ PERROR("close");
+ }
goto error;
}
}
--
2.1.0
More information about the lttng-dev
mailing list