diff options
author | Jonathan Rose <jrose@digium.com> | 2011-11-30 21:10:38 +0000 |
---|---|---|
committer | Jonathan Rose <jrose@digium.com> | 2011-11-30 21:10:38 +0000 |
commit | 6fa827b5d0f0c071b92be4047fa6b4f008e1e200 (patch) | |
tree | 141401c350fcf5583cb3c6ab22012cbff35a245d /channels/chan_sip.c | |
parent | cb21847e0377ef844bc8f075e0605ac5d5c84aa9 (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.c | 13 |
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; } |