summaryrefslogtreecommitdiff
path: root/ext/srtp
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2017-08-24 18:00:41 +1000
committerMatthew Waters <matthew@centricular.com>2017-08-24 18:02:01 +1000
commit029e01743f8786c23197d9697b89e9bc3eacfdf3 (patch)
treeda81f84dfafe805a59b7ede8fec59c2686d45880 /ext/srtp
parent63dd27a7855fbd3997f1bd0ef0d49adf86ae4948 (diff)
downloadgstreamer-plugins-bad-029e01743f8786c23197d9697b89e9bc3eacfdf3.tar.gz
srtp: zero out session member on dealloc
Fixes a user-after-free retrieving stats from _get_property()
Diffstat (limited to 'ext/srtp')
-rw-r--r--ext/srtp/gstsrtpdec.c4
-rw-r--r--ext/srtp/gstsrtpenc.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/ext/srtp/gstsrtpdec.c b/ext/srtp/gstsrtpdec.c
index e1be70e0a..4ad989fb2 100644
--- a/ext/srtp/gstsrtpdec.c
+++ b/ext/srtp/gstsrtpdec.c
@@ -777,8 +777,10 @@ gst_srtp_dec_clear_streams (GstSrtpDec * filter)
GST_OBJECT_LOCK (filter);
- if (!filter->first_session)
+ if (!filter->first_session) {
srtp_dealloc (filter->session);
+ filter->session = NULL;
+ }
if (filter->streams)
nb = g_hash_table_foreach_remove (filter->streams, remove_yes, NULL);
diff --git a/ext/srtp/gstsrtpenc.c b/ext/srtp/gstsrtpenc.c
index ff17fd03f..893ece8be 100644
--- a/ext/srtp/gstsrtpenc.c
+++ b/ext/srtp/gstsrtpenc.c
@@ -447,8 +447,10 @@ gst_srtp_enc_create_session (GstSrtpEnc * filter)
static void
gst_srtp_enc_reset_no_lock (GstSrtpEnc * filter)
{
- if (!filter->first_session)
+ if (!filter->first_session) {
srtp_dealloc (filter->session);
+ filter->session = NULL;
+ }
filter->first_session = TRUE;
filter->key_changed = FALSE;