asterisk/res
Kevin Harwell b805e1237d srtp: Fix possible race condition, and add NULL checks
Somehow it's possible for the srtp session object to be NULL even though the
Asterisk srtp object itself is valid. When this happened it would cause a
crash down in the srtp code when attempting to protect or unprotect data.

After looking at the code there is at least one spot that makes this situation
possible. If Asterisk fails to unprotect the data, and after several retries
it still can't then the srtp->session gets freed, and set to NULL while still
leaving the Asterisk srtp object around. However, according to the original
issue reporter this does not appear to be their situation since they found
no errors logged stating the above happened (which Asterisk does for that
situation).

An issue was found however, where a possible race condition could occur between
the pjsip incoming negotiation, and the receiving of RTP packets. Both places
could attempt to create/setup srtp for the same rtp instance at the same time.
This potentially could be the cause of the problem as well.

Given the above this patch adds locking around srtp setup for a given rtp, or
rtcp instance. NULL checks for the session have also been added within the
protect and unprotect functions as a precaution. These checks should at least
stop Asterisk from crashing if it gets in this situation again.

This patch also fixes one other issue noticed during investigation. When doing
a replace the old object was freed before creating the replacement. If the new
replacement object failed to create then the rtp/rtcp instance would now point
to freed srtp data which could potentially cause a crash as well when the next
attempt to reference it was made. This is now fixed so the old srtp object is
kept upon replacement failure.

Lastly, more logging has been added to help diagnose future issues.

ASTERISK-28472

Change-Id: I240e11cbb1e9ea8083d59d50db069891228fe5cc
2019-08-08 11:31:15 -05:00
..
ael Merge "res_ael: Use Gosub in for loop expressions" 2019-04-16 08:11:28 -05:00
ari res/ari/resource_channels.c: Added hangup reason code for channels 2019-06-27 11:03:08 -05:00
parking stasis: Segment channel snapshot to reduce creation cost. 2018-11-26 12:56:24 -06:00
prometheus res_prometheus: Add metrics for PJSIP outbound registrations 2019-05-22 08:25:19 -05:00
res_pjsip res_pjsip: Fix multiple of the same contact in "pjsip show contacts". 2019-08-01 04:12:00 -06:00
snmp Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
srtp res_srtp: Add support for libsrtp2 with AES-GCM. 2017-10-18 03:34:56 -05:00
stasis stasis: Hangup channel for Local channel No such extension error 2019-05-06 04:27:02 -06:00
stasis_recording core: Remove ABI effects of MALLOC_DEBUG. 2018-03-01 13:13:55 -06:00
ari.make Build System: Create Makefile macro MOD_ADD_SOURCE. 2015-04-14 12:53:03 -04:00
Makefile res_prometheus: Add Asterisk channel metrics 2019-05-21 11:03:13 -05:00
res.xml Create --disable-binary-modules option. 2018-08-27 13:22:31 -04:00
res_adsi.c module: Remove deprecated modules and update support levels. 2018-07-18 18:15:53 +00:00
res_ael_share.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_ael_share.exports.in
res_agi.c Use non-blocking socket() and pipe() wrappers 2018-12-11 12:29:09 -05:00
res_agi.exports.in
res_ari.c res_ari: Remove requirement that body exists when debug is on. 2018-05-03 05:37:01 -06:00
res_ari.exports.in Rename everything Stasis-HTTP to ARI 2013-07-27 23:11:02 +00:00
res_ari_applications.c ARI event type filtering 2019-02-20 09:56:22 -06:00
res_ari_asterisk.c Added ARI resource /ari/asterisk/ping 2019-01-30 12:51:03 +00:00
res_ari_bridges.c Merge "Remove redundant module checks and references." 2018-01-29 12:39:34 -06:00
res_ari_channels.c res/ari/resource_channels.c: Added hangup reason code for channels 2019-06-27 11:03:08 -05:00
res_ari_device_states.c Merge "Remove redundant module checks and references." 2018-01-29 12:39:34 -06:00
res_ari_endpoints.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_ari_events.c Merge "Remove redundant module checks and references." 2018-01-29 12:39:34 -06:00
res_ari_mailboxes.c Merge "Remove redundant module checks and references." 2018-01-29 12:39:34 -06:00
res_ari_model.c modules: change module LOAD_FAILUREs to LOAD_DECLINES 2017-04-12 15:57:21 -06:00
res_ari_model.exports.in Rename everything Stasis-HTTP to ARI 2013-07-27 23:11:02 +00:00
res_ari_playbacks.c Merge "Remove redundant module checks and references." 2018-01-29 12:39:34 -06:00
res_ari_recordings.c Merge "Remove redundant module checks and references." 2018-01-29 12:39:34 -06:00
res_ari_sounds.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_calendar.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_calendar.exports.in
res_calendar_caldav.c res_calendar: Specialized calendars depend on symbols of general calendar. 2018-02-16 13:52:37 +01:00
res_calendar_ews.c res_calendar: Specialized calendars depend on symbols of general calendar. 2018-02-16 13:52:37 +01:00
res_calendar_exchange.c res_calendar: Specialized calendars depend on symbols of general calendar. 2018-02-16 13:52:37 +01:00
res_calendar_icalendar.c res_calendar: Specialized calendars depend on symbols of general calendar. 2018-02-16 13:52:37 +01:00
res_chan_stats.c stasis: Segment channel snapshot to reduce creation cost. 2018-11-26 12:56:24 -06:00
res_clialiases.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_clioriginate.c manager: Restore Originate failure behavior from Asterisk 11 2017-02-10 18:04:41 -05:00
res_config_curl.c loader: Convert reload_classes to built-in modules. 2018-03-14 05:20:12 -04:00
res_config_ldap.c Fix 'statement' typo throughout code. 2018-10-18 12:44:10 -05:00
res_config_odbc.c res_config_odbc: set empty extended field as a single whitespace 2019-03-25 10:43:54 -06:00
res_config_pgsql.c loader: Convert reload_classes to built-in modules. 2018-03-14 05:20:12 -04:00
res_config_sqlite.c loader: Convert reload_classes to built-in modules. 2018-03-14 05:20:12 -04:00
res_config_sqlite3.c res_config_sqlite3: Only join threads that we started 2019-07-24 04:51:43 -06:00
res_convert.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_corosync.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_crypto.c res_crypto: Allow OpenSSL configured with no-deprecated. 2018-06-08 11:03:35 +02:00
res_crypto.exports.in
res_curl.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_endpoint_stats.c loader: Add dependency fields to module structures. 2018-01-15 13:25:51 -05:00
res_fax.c res_fax: gateway sends T.38 request to both endpoints if V.21 detected 2019-06-20 16:57:49 -06:00
res_fax.exports.in res_fax: Provide AMI equivalents for fax CLI commands 2014-07-18 15:49:46 +00:00
res_fax_spandsp.c loader: Add dependency fields to module structures. 2018-01-15 13:25:51 -05:00
res_format_attr_celt.c Remove ASTERISK_REGISTER_FILE. 2016-10-27 09:53:55 -04:00
res_format_attr_g729.c Remove ASTERISK_REGISTER_FILE. 2016-10-27 09:53:55 -04:00
res_format_attr_h263.c Loader: Remove unneeded load_pri declarations. 2017-11-20 13:17:55 -06:00
res_format_attr_h264.c res_format_attr_h264.c: Make sure profile-level-id fmtp attribute is set 2018-12-13 17:03:59 -05:00
res_format_attr_ilbc.c codecs: Add iLBC 20. 2016-07-22 10:09:08 +02:00
res_format_attr_opus.c Fix Common Typo's. 2017-12-20 12:40:01 -05:00
res_format_attr_silk.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_format_attr_siren7.c Remove ASTERISK_REGISTER_FILE. 2016-10-27 09:53:55 -04:00
res_format_attr_siren14.c Remove ASTERISK_REGISTER_FILE. 2016-10-27 09:53:55 -04:00
res_format_attr_vp8.c Remove ASTERISK_REGISTER_FILE. 2016-10-27 09:53:55 -04:00
res_hep.c netsock2: Add ast_sockaddr_resolve_first_af to netsock2 public API 2018-05-21 11:03:10 -05:00
res_hep.exports.in res_hep_{pjsip|rtcp}: Decline module loads if res_hep had not loaded 2016-06-08 12:32:02 -05:00
res_hep_pjsip.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_hep_rtcp.c stasis: Add internal filtering of messages. 2018-11-18 15:08:16 -05:00
res_http_media_cache.c Add the ability to read the media file type from HTTP header for playback 2018-04-30 16:30:44 -04:00
res_http_post.c res_http_post: Enable GMime in Solaris 11. 2018-06-21 10:18:36 -06:00
res_http_websocket.c res_http_websocket: ensure control frames do not interfere with data 2019-01-23 09:02:38 -06:00
res_http_websocket.exports.in res_http_websocket: Export symbol for ast_websocket_set_timeout 2014-06-26 18:27:53 +00:00
res_limit.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_manager_devicestate.c AST_MODULE_INFO: Format corrections to the usages of AST_MODULE_INFO macro. 2015-05-13 16:34:23 -05:00
res_manager_presencestate.c AST_MODULE_INFO: Format corrections to the usages of AST_MODULE_INFO macro. 2015-05-13 16:34:23 -05:00
res_monitor.c Complete deprecating legacy modules. 2018-03-08 13:53:09 -06:00
res_monitor.exports.in
res_musiconhold.c res_musiconhold: Use a vector instead of custom array allocation 2019-08-01 13:44:24 -06:00
res_mutestream.c Remove ASTERISK_REGISTER_FILE. 2016-10-27 09:53:55 -04:00
res_mwi_devstate.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_mwi_external.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_mwi_external.exports.in External MWI core support. 2014-01-06 17:45:25 +00:00
res_mwi_external_ami.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_odbc.c res_odbc: Add basic query logging. 2019-02-07 08:23:14 -06:00
res_odbc.exports.in res_odbc: Fix exports.in for missing symbols 2016-02-16 16:42:26 -06:00
res_odbc_transaction.c res_odbc_transaction: add dep on generic_odbc 2016-08-21 18:56:01 -05:00
res_odbc_transaction.exports.in res_odbc: Remove connection management 2016-01-22 11:59:06 -06:00
res_parking.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_phoneprov.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_phoneprov.exports.in res_phoneprov: Refactor phoneprov to allow pluggable config providers 2014-10-09 17:46:23 +00:00
res_pjproject.c res_pjproject: Fix sockaddr conversion routines for non-bundled PJSIP 2018-09-12 07:26:33 -05:00
res_pjproject.exports.in res_pjproject: Add utility functions to convert between socket structures 2018-09-06 13:30:12 -05:00
res_pjsip.c res_pjsip: Check return from pjsip_parse_uri calls 2019-05-02 12:32:40 -06:00
res_pjsip.exports.in res_pjsip: Add REF_DEBUG info to module references. 2017-10-04 12:00:47 -04:00
res_pjsip_acl.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_authenticator_digest.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_caller_id.c res_pjsip_caller_id: Use static pj_str_t for fromto header names. 2018-11-15 15:49:12 -05:00
res_pjsip_config_wizard.c res_pjsip_config_wizard: Don't crash if misconfigured 2019-02-27 19:54:32 -06:00
res_pjsip_dialog_info_body_generator.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_diversion.c res_pjsip_diversion: Use static pj_str_t for Diversion header names 2019-03-01 16:47:22 -06:00
res_pjsip_dlg_options.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_dtmf_info.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_empty_info.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_endpoint_identifier_anonymous.c endpoint identifiers: Some code cleanup. 2018-02-02 18:03:06 -06:00
res_pjsip_endpoint_identifier_ip.c res_pjsip_endpoint_identifier_ip.c: Added regex support to match_header 2018-07-27 10:58:38 -05:00
res_pjsip_endpoint_identifier_user.c endpoint identifiers: Some code cleanup. 2018-02-02 18:03:06 -06:00
res_pjsip_exten_state.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_pjsip_exten_state.exports.in The large GULP->PJSIP renaming effort. 2013-07-30 18:14:50 +00:00
res_pjsip_header_funcs.c res_pjsip.c: Split ast_sip_push_task_synchronous() to fit expectations. 2018-04-12 17:34:16 -05:00
res_pjsip_history.c VECTOR: Passing parameters with side effects to macros is dangerous. 2018-06-21 16:10:52 -06:00
res_pjsip_logger.c res_pjsip: Log IPv6 addresses correctly 2018-09-14 14:59:23 -05:00
res_pjsip_messaging.c res_pjsip_messaging: Check for body in in-dialog message 2019-07-11 11:40:04 -05:00
res_pjsip_mwi.c MWI: Update modules that subscribe to MWI to use new API calls 2019-07-08 18:12:49 -05:00
res_pjsip_mwi_body_generator.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_nat.c res/res_pjsip_nat: Fix logic for REINVITES 2018-11-15 06:35:24 -05:00
res_pjsip_notify.c res_pjsip_notify: improve realtime performance on CLI completion on the endpoint 2018-10-27 17:51:02 -05:00
res_pjsip_one_touch_record_info.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_outbound_authenticator_digest.c res_pjsip: Implement additional SIP RFCs for Google Voice trunk compatability 2018-10-24 07:51:25 -05:00
res_pjsip_outbound_publish.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_pjsip_outbound_publish.exports.in res_pjsip_outbound_publish: Add module which provides outbound PUBLISH support. 2014-08-07 14:35:09 +00:00
res_pjsip_outbound_registration.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_pjsip_path.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_phoneprov_provider.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_pidf_body_generator.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_pidf_digium_body_supplement.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_pidf_eyebeam_body_supplement.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_publish_asterisk.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_pjsip_pubsub.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_pjsip_pubsub.exports.in res_pjsip_mwi: Add voicemail extension and mwi_subscribe_replaces_unsolicited 2016-03-30 13:23:54 -05:00
res_pjsip_refer.c res_pjsip: Added a norefersub configuration setting 2019-04-17 10:18:40 -05:00
res_pjsip_registrar.c res_pjsip: Check return from pjsip_parse_uri calls 2019-05-02 12:32:40 -06:00
res_pjsip_rfc3326.c res_pjsip: Add 'suppress_q850_reason_headers' option to endpoint 2018-07-06 07:03:45 -06:00
res_pjsip_sdp_rtp.c srtp: Fix possible race condition, and add NULL checks 2019-08-08 11:31:15 -05:00
res_pjsip_send_to_voicemail.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_session.c res_pjsip_session Added rtcp stats result vector into the session 2019-02-13 23:04:08 +01:00
res_pjsip_session.exports.in res_pjsip: Add REF_DEBUG info to module references. 2017-10-04 12:00:47 -04:00
res_pjsip_sips_contact.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_t38.c res_pjsip_t38.c: Fix crash if already saw a final T.38 reINVITE response. 2018-08-17 18:56:24 -05:00
res_pjsip_transport_websocket.c pjsip_transport_management: Shutdown transport immediately on disconnect 2019-01-21 07:57:12 -06:00
res_pjsip_xpidf_body_generator.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pktccops.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pktccops.exports.in
res_prometheus.c res_prometheus: Add metrics for PJSIP outbound registrations 2019-05-22 08:25:19 -05:00
res_prometheus.exports.in Add core Prometheus support to Asterisk 2019-05-20 20:33:58 -05:00
res_realtime.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_remb_modifier.c res_remb_modifier: Propertly initialize bitrate to 0.0 2019-04-18 08:04:11 -06:00
res_resolver_unbound.c configure.ac: Check for unbound version >= 1.5 2018-09-25 13:30:09 -06:00
res_rtp_asterisk.c res_rtp_asterisk: Move where DTLS MTU variable is defined. 2019-07-14 12:27:13 -06:00
res_rtp_multicast.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_rtp_multicast.exports.in multicast RTP: Add dialing options 2016-05-27 11:00:09 -05:00
res_security_log.c stasis: Add internal filtering of messages. 2018-11-18 15:08:16 -05:00
res_smdi.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_smdi.exports.in
res_snmp.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_sorcery_astdb.c astdb: Improve prefix searches in astdb 2017-12-10 12:51:16 -06:00
res_sorcery_config.c res_sorcery_config: Allow configuration section to be used based on name. 2018-07-18 13:20:49 -05:00
res_sorcery_memory.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_sorcery_memory_cache.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_sorcery_realtime.c res_sorcery_realtime.c: Fix unqualified fetch warning. 2018-08-17 16:33:24 -05:00
res_speech.c res_stasis and res_speech: Fix load order. 2017-12-07 19:39:04 -06:00
res_speech.exports.in app_speech_utils: Fix unresolved symbol ast_speech_get_setting(). 2013-09-16 18:00:32 +00:00
res_srtp.c srtp: Fix possible race condition, and add NULL checks 2019-08-08 11:31:15 -05:00
res_srtp.exports.in Reverting accidental ci of wrong change in r433061 2015-03-17 22:03:01 +00:00
res_stasis.c Merge "res/res_ari: Added timestamp as a requirement for all ARI events" 2019-03-26 08:32:28 -05:00
res_stasis.exports.in Moved core logic from app_stasis to res_stasis 2013-04-15 16:43:47 +00:00
res_stasis_answer.c loader: Add dependency fields to module structures. 2018-01-15 13:25:51 -05:00
res_stasis_answer.exports.in Add missing exports file 2013-05-20 14:21:39 +00:00
res_stasis_device_state.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_stasis_device_state.exports.in ARI: Implement device state API 2013-11-23 17:48:28 +00:00
res_stasis_mailbox.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_stasis_mailbox.exports.in ARI: Add mailboxes resource for controlling and polling external MWI 2014-01-14 23:44:57 +00:00
res_stasis_playback.c res/res_ari: Added timestamp as a requirement for all ARI events 2019-03-11 23:57:01 +01:00
res_stasis_playback.exports.in This patch implements the REST API's for POST /channels/{channelId}/play 2013-05-23 20:11:35 +00:00
res_stasis_recording.c res/res_ari: Added timestamp as a requirement for all ARI events 2019-03-11 23:57:01 +01:00
res_stasis_recording.exports.in ARI - channel recording support 2013-07-03 17:58:45 +00:00
res_stasis_snoop.c loader: Add dependency fields to module structures. 2018-01-15 13:25:51 -05:00
res_stasis_snoop.exports.in ari: Add Snoop operation for spying/whispering on channels. 2013-11-23 12:40:46 +00:00
res_stasis_test.c optional_api: Remove unused nonoptreq fields 2018-09-12 12:34:54 -05:00
res_stasis_test.exports.in Initial support for endpoints. 2013-05-08 13:39:08 +00:00
res_statsd.c res_statsd.c: Fix returned reload status. 2018-10-09 16:30:33 -05:00
res_statsd.exports.in res_statsd: Fix exports.in for missing symbols 2016-02-16 12:26:29 -06:00
res_stun_monitor.c res_stun_monitor: Don't fail to load if DNS resolution fails 2017-04-14 16:55:03 -05:00
res_timing_dahdi.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_timing_kqueue.c res_timing: Don't close FD 0 when out of open files. 2015-07-02 05:13:37 -05:00
res_timing_pthread.c Use non-blocking socket() and pipe() wrappers 2018-12-11 12:29:09 -05:00
res_timing_timerfd.c res_timing: Don't close FD 0 when out of open files. 2015-07-02 05:13:37 -05:00
res_xmpp.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_xmpp.exports.in Add a new unified Jingle, Google Jingle, and Google Talk channel driver written from scratch called chan_motif. 2012-07-07 17:06:51 +00:00