From fa023cbfa0e71ad8d2b6e2146c5d4ca1792b206f Mon Sep 17 00:00:00 2001
From: Sean Bright <sean.bright@gmail.com>
Date: Wed, 30 Sep 2020 16:00:36 -0400
Subject: [PATCH] tcptls.c: Don't close TCP client file descriptors more than
 once

ASTERISK-28430 #close

Change-Id: Ib556b0a0c95cca939e956886214ec8d828d89606
---
 main/tcptls.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/main/tcptls.c b/main/tcptls.c
index 6a26cb865c..45eb29bf6c 100644
--- a/main/tcptls.c
+++ b/main/tcptls.c
@@ -608,13 +608,8 @@ struct ast_tcptls_session_instance *ast_tcptls_client_start(struct ast_tcptls_se
 	return handle_tcptls_connection(tcptls_session);
 
 client_start_error:
-	if (desc) {
-		close(desc->accept_fd);
-		desc->accept_fd = -1;
-	}
 	ao2_ref(tcptls_session, -1);
 	return NULL;
-
 }
 
 struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_session_args *desc)
@@ -631,10 +626,6 @@ struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_s
 	/* If we return early, there is no connection */
 	ast_sockaddr_setnull(&desc->old_address);
 
-	if (desc->accept_fd != -1) {
-		close(desc->accept_fd);
-	}
-
 	fd = desc->accept_fd = socket(ast_sockaddr_is_ipv6(&desc->remote_address) ?
 				      AF_INET6 : AF_INET, SOCK_STREAM, IPPROTO_TCP);
 	if (desc->accept_fd < 0) {
@@ -672,6 +663,9 @@ struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_s
 		goto error;
 	}
 
+	/* From here on out, the iostream owns the accept_fd and it will take
+	 * care of closing it when the iostream is closed */
+
 	tcptls_session->parent = desc;
 	tcptls_session->parent->worker_fn = NULL;
 	ast_sockaddr_copy(&tcptls_session->remote_address,
-- 
GitLab