Remove a superfluous and dangerous freeing of an SSL_CTX.
authorMark Michelson <mmichelson@digium.com>
Fri, 6 Jul 2012 18:49:17 +0000 (18:49 +0000)
committerMark Michelson <mmichelson@digium.com>
Fri, 6 Jul 2012 18:49:17 +0000 (18:49 +0000)
The problem here is that multiple server sessions share
a SSL_CTX. When one session ended, the SSL_CTX would be
freed and set NULL, leaving the other sessions unable to
function.

The code being removed is superfluous because the SSL_CTX
structures for servers will be properly freed when ast_ssl_teardown
is called.

(closes issue ASTERISK-20074)
Reported by Trevor Helmsley
Patches:
ASTERISK-20074.diff uploaded by Mark Michelson (license #5049)
Testers:
Trevor Helmsley
........

Merged revisions 369731 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 369732 from http://svn.asterisk.org/svn/asterisk/branches/10

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@369733 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/tcptls.c

index 7a3ce4c..8197265 100644 (file)
@@ -135,14 +135,6 @@ HOOK_T ast_tcptls_server_write(struct ast_tcptls_session_instance *tcptls_sessio
        return write(tcptls_session->fd, buf, count);
 }
 
-static void session_instance_destructor(void *obj)
-{
-       struct ast_tcptls_session_instance *i = obj;
-       if (i->parent && i->parent->tls_cfg) {
-               ast_ssl_teardown(i->parent->tls_cfg);
-       }
-}
-
 /*! \brief
 * creates a FILE * from the fd passed by the accept thread.
 * This operation is potentially expensive (certificate verification),
@@ -291,7 +283,7 @@ void *ast_tcptls_server_root(void *data)
                        }
                        continue;
                }
-               tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor);
+               tcptls_session = ao2_alloc(sizeof(*tcptls_session), NULL);
                if (!tcptls_session) {
                        ast_log(LOG_WARNING, "No memory for new session: %s\n", strerror(errno));
                        if (close(fd)) {
@@ -505,7 +497,7 @@ struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_s
                }
        }
 
-       if (!(tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor))) {
+       if (!(tcptls_session = ao2_alloc(sizeof(*tcptls_session), NULL))) {
                goto error;
        }