[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