Changeset 5794


Ignore:
Timestamp:
May 18, 2018 7:12:41 AM (15 months ago)
Author:
nanang
Message:

Re #2096:

  • Fixed memory leak due to not destroyed DTLS-SRTP keying (when it is not active).
  • DTLS-SRTP must not destroy itself, keying destroy must be initiated by SRTP.
Location:
pjproject/trunk/pjmedia/src/pjmedia
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/transport_srtp.c

    r5790 r5794  
    12701270    PJ_ASSERT_RETURN(tp, PJ_EINVAL); 
    12711271 
    1272     /* Close keying */ 
    1273     for (i=0; i < srtp->keying_cnt; i++) 
    1274         pjmedia_transport_close(srtp->keying[i]); 
     1272    /* Close all keying. Note that any keying should not be destroyed before 
     1273     * SRTP transport is destroyed as re-INVITE may initiate new keying method 
     1274     * without destroying SRTP transport. 
     1275     */ 
     1276    for (i=0; i < srtp->all_keying_cnt; i++) 
     1277        pjmedia_transport_close(srtp->all_keying[i]); 
    12751278 
    12761279    /* Close member if configured */ 
     
    16121615            !srtp_crypto_empty(&srtp->rx_policy_neg)) 
    16131616        { 
    1614             /* SRTP nego is done, let's destroy any other keying. */ 
    1615             unsigned j; 
    1616             for (j = 0; j < srtp->keying_cnt; ++j) { 
    1617                 if (j != i) 
    1618                     pjmedia_transport_close(srtp->keying[j]); 
    1619             } 
     1617            /* SRTP nego is done */ 
    16201618            srtp->keying_cnt = 1; 
    16211619            srtp->keying[0] = srtp->keying[i]; 
     
    16831681            !srtp_crypto_empty(&srtp->rx_policy_neg)) 
    16841682        { 
    1685             /* SRTP nego is done, let's destroy any other keying. */ 
    1686             unsigned j; 
    1687             for (j = 0; j < srtp->keying_cnt; ++j) { 
    1688                 if (j != i) 
    1689                     pjmedia_transport_close(srtp->keying[j]); 
    1690             } 
     1683            /* SRTP nego is done */ 
    16911684            srtp->keying_cnt = 1; 
    16921685            srtp->keying[0] = srtp->keying[i]; 
  • pjproject/trunk/pjmedia/src/pjmedia/transport_srtp_dtls.c

    r5788 r5794  
    10621062        switch (ds->srtp->setting.use) { 
    10631063            case PJMEDIA_SRTP_DISABLED: 
    1064                 if (attr_setup) 
    1065                     return PJMEDIA_SRTP_ESDPINTRANSPORT; 
     1064                if (attr_setup) { 
     1065                    status = PJMEDIA_SRTP_ESDPINTRANSPORT; 
     1066                    goto on_return; 
     1067                } 
    10661068                break; 
    10671069            case PJMEDIA_SRTP_OPTIONAL: 
    10681070                break; 
    10691071            case PJMEDIA_SRTP_MANDATORY: 
    1070                 if (!attr_setup) 
    1071                     return PJMEDIA_SRTP_ESDPINTRANSPORT; 
     1072                if (!attr_setup) { 
     1073                    status = PJMEDIA_SRTP_ESDPINTRANSPORT; 
     1074                    goto on_return; 
     1075                } 
    10721076                break; 
    10731077        } 
     
    10781082 
    10791083on_return: 
     1084#if DTLS_DEBUG 
    10801085    if (status != PJ_SUCCESS) { 
    10811086        pj_perror(4, ds->base.name, status, "dtls_media_create() failed"); 
    1082         dtls_destroy(tp); 
    1083     } 
     1087    } 
     1088#endif 
    10841089    return status; 
    10851090} 
     
    12561261 
    12571262on_return: 
     1263#if DTLS_DEBUG 
    12581264    if (status != PJ_SUCCESS) { 
    12591265        pj_perror(4, ds->base.name, status, "dtls_encode_sdp() failed"); 
    1260         dtls_destroy(tp); 
    1261     } 
     1266    } 
     1267#endif 
    12621268    return status; 
    12631269} 
     
    13931399 
    13941400on_return: 
     1401#if DTLS_DEBUG 
    13951402    if (status != PJ_SUCCESS) { 
    13961403        pj_perror(4, ds->base.name, status, "dtls_media_start() failed"); 
    1397         dtls_destroy(tp); 
    1398     } 
     1404    } 
     1405#endif 
    13991406    return status; 
    14001407} 
Note: See TracChangeset for help on using the changeset viewer.