]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_rtp_asterisk: Fix crash when RTCP is not present when DTLS is stopped.
authorJoshua Colp <jcolp@digium.com>
Thu, 16 Mar 2017 14:07:55 +0000 (14:07 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 16 Mar 2017 14:07:55 +0000 (14:07 +0000)
This change removes an assumption that when DTLS is stopped
an RTCP session will be present on the RTP session. This is not
always the case.

ASTERISK-26732

Change-Id: Ib9f7c09ce0b005efe362dbcc8795202b18f94611

res/res_rtp_asterisk.c

index 62fe4fd4a28d921c02f725f9d7f7c20ea4b9b1a8..e4e0d8e72e16886174672307593fa611226720e0 100644 (file)
@@ -1577,7 +1577,7 @@ static int ast_rtp_dtls_active(struct ast_rtp_instance *instance)
 static void ast_rtp_dtls_stop(struct ast_rtp_instance *instance)
 {
        struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
-       int rtcp_dtls_unique = (rtp->dtls.ssl != rtp->rtcp->dtls.ssl);
+       SSL *ssl = rtp->dtls.ssl;
 
        dtls_srtp_stop_timeout_timer(instance, rtp, 0);
 
@@ -1595,7 +1595,7 @@ static void ast_rtp_dtls_stop(struct ast_rtp_instance *instance)
        if (rtp->rtcp) {
                dtls_srtp_stop_timeout_timer(instance, rtp, 1);
 
-               if (rtp->rtcp->dtls.ssl && rtcp_dtls_unique) {
+               if (rtp->rtcp->dtls.ssl && (rtp->rtcp->dtls.ssl != ssl)) {
                        SSL_free(rtp->rtcp->dtls.ssl);
                        rtp->rtcp->dtls.ssl = NULL;
                        ast_mutex_destroy(&rtp->rtcp->dtls.lock);