[Asterisk-code-review] tcptls.c: Add some missing allocation failure checks. (asterisk[master])

Anonymous Coward asteriskteam at digium.com
Mon Feb 20 17:43:28 CST 2017


Anonymous Coward #1000019 has submitted this change and it was merged. ( https://gerrit.asterisk.org/5003 )

Change subject: tcptls.c: Add some missing allocation failure checks.
......................................................................


tcptls.c: Add some missing allocation failure checks.

* Fix tcptls_session ref and fd leak in ast_tcptls_server_root().

Change-Id: I0ddf01cd3c10d3b6666d7bf68d4e206a37f4fbdb
---
M main/tcptls.c
1 file changed, 14 insertions(+), 10 deletions(-)

Approvals:
  Kevin Harwell: Looks good to me, approved
  Anonymous Coward #1000019: Verified
  Joshua Colp: Looks good to me, but someone else must approve



diff --git a/main/tcptls.c b/main/tcptls.c
index 7f1421d..1377dd7 100644
--- a/main/tcptls.c
+++ b/main/tcptls.c
@@ -240,20 +240,23 @@
 		}
 		tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor);
 		if (!tcptls_session) {
-			ast_log(LOG_WARNING, "No memory for new session: %s\n", strerror(errno));
-			if (close(fd)) {
-				ast_log(LOG_ERROR, "close() failed: %s\n", strerror(errno));
-			}
+			close(fd);
 			continue;
 		}
 
 		tcptls_session->overflow_buf = ast_str_create(128);
+		if (!tcptls_session->overflow_buf) {
+			ao2_ref(tcptls_session, -1);
+			close(fd);
+			continue;
+		}
 		flags = fcntl(fd, F_GETFL);
 		fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
 
 		tcptls_session->stream = ast_iostream_from_fd(&fd);
 		if (!tcptls_session->stream) {
-			ast_log(LOG_WARNING, "No memory for new session iostream\n");
+			ao2_ref(tcptls_session, -1);
+			close(fd);
 			continue;
 		}
 
@@ -265,7 +268,6 @@
 		/* This thread is now the only place that controls the single ref to tcptls_session */
 		if (ast_pthread_create_detached_background(&launched, NULL, handle_tcptls_connection, tcptls_session)) {
 			ast_log(LOG_ERROR, "Unable to launch helper thread: %s\n", strerror(errno));
-			ast_tcptls_close_session_file(tcptls_session);
 			ao2_ref(tcptls_session, -1);
 		}
 	}
@@ -561,11 +563,15 @@
 		}
 	}
 
-	if (!(tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor))) {
+	tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor);
+	if (!tcptls_session) {
 		goto error;
 	}
 
 	tcptls_session->overflow_buf = ast_str_create(128);
+	if (!tcptls_session->overflow_buf) {
+		goto error;
+	}
 	tcptls_session->client = 1;
 	tcptls_session->stream = ast_iostream_from_fd(&fd);
 	if (!tcptls_session->stream) {
@@ -584,9 +590,7 @@
 error:
 	close(desc->accept_fd);
 	desc->accept_fd = -1;
-	if (tcptls_session) {
-		ao2_ref(tcptls_session, -1);
-	}
+	ao2_cleanup(tcptls_session);
 	return NULL;
 }
 

-- 
To view, visit https://gerrit.asterisk.org/5003
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0ddf01cd3c10d3b6666d7bf68d4e206a37f4fbdb
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>



More information about the asterisk-code-review mailing list