summaryrefslogtreecommitdiff
path: root/channels/chan_sip.c
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2011-11-30 21:10:38 +0000
committerJonathan Rose <jrose@digium.com>2011-11-30 21:10:38 +0000
commit6fa827b5d0f0c071b92be4047fa6b4f008e1e200 (patch)
tree141401c350fcf5583cb3c6ab22012cbff35a245d /channels/chan_sip.c
parentcb21847e0377ef844bc8f075e0605ac5d5c84aa9 (diff)
Cleaning up chan_sip/tcptls file descriptor closing.
This patch attempts to eliminate various possible instances of undefined behavior caused by invoking close/fclose in situations where fclose may have already been issued on a tcptls_session_instance and/or closing file descriptors that don't have a valid index for fd (-1). Thanks for more than a little help from wdoekes. (closes issue ASTERISK-18700) Reported by: Erik Wallin (issue ASTERISK-18345) Reported by: Stephane Cazelas (issue ASTERISK-18342) Reported by: Stephane Chazelas Review: https://reviewboard.asterisk.org/r/1576/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@346525 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r--channels/chan_sip.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 3b3a3460a..75b207e1b 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2813,14 +2813,7 @@ cleanup:
if (tcptls_session) {
ast_mutex_lock(&tcptls_session->lock);
- if (tcptls_session->f) {
- fclose(tcptls_session->f);
- tcptls_session->f = NULL;
- }
- if (tcptls_session->fd != -1) {
- close(tcptls_session->fd);
- tcptls_session->fd = -1;
- }
+ ast_tcptls_close_session_file(tcptls_session);
tcptls_session->parent = NULL;
ast_mutex_unlock(&tcptls_session->lock);
@@ -26019,8 +26012,8 @@ create_tcptls_session_fail:
ao2_t_ref(ca, -1, "failed to create client, getting rid of client tcptls_session arguments");
}
if (s->tcptls_session) {
- close(tcptls_session->fd);
- s->fd = tcptls_session->fd = -1;
+ ast_tcptls_close_session_file(tcptls_session);
+ s->fd = -1;
ao2_ref(s->tcptls_session, -1);
s->tcptls_session = NULL;
}