mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-14 16:33:34 +00:00
Remove a superfluous and dangerous freeing of an SSL_CTX.
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
This commit is contained in:
@@ -135,14 +135,6 @@ HOOK_T ast_tcptls_server_write(struct ast_tcptls_session_instance *tcptls_sessio
|
|||||||
return write(tcptls_session->fd, buf, count);
|
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
|
/*! \brief
|
||||||
* creates a FILE * from the fd passed by the accept thread.
|
* creates a FILE * from the fd passed by the accept thread.
|
||||||
* This operation is potentially expensive (certificate verification),
|
* This operation is potentially expensive (certificate verification),
|
||||||
@@ -291,7 +283,7 @@ void *ast_tcptls_server_root(void *data)
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor);
|
tcptls_session = ao2_alloc(sizeof(*tcptls_session), NULL);
|
||||||
if (!tcptls_session) {
|
if (!tcptls_session) {
|
||||||
ast_log(LOG_WARNING, "No memory for new session: %s\n", strerror(errno));
|
ast_log(LOG_WARNING, "No memory for new session: %s\n", strerror(errno));
|
||||||
if (close(fd)) {
|
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;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user