From 36c4172a56b7b4b1796deaf6e4bfa820157bdb3f Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 10 Apr 2017 11:08:08 -0400 Subject: [PATCH] TT#14008 add missing DTLS locks fixes possible segfaults due to race conditions fixes #283 Change-Id: I7efba57d914163986c294b8fb1dd9531d5ef7a89 --- daemon/dtls.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/daemon/dtls.c b/daemon/dtls.c index 33d3e925c..be9aa44cf 100644 --- a/daemon/dtls.c +++ b/daemon/dtls.c @@ -678,13 +678,22 @@ int dtls(struct packet_stream *ps, const str *s, const endpoint_t *fsin) { } else if (ret == 1) { /* connected! */ + mutex_lock(&ps->out_lock); // nested lock! if (dtls_setup_crypto(ps, d)) /* XXX ?? */ ; + mutex_unlock(&ps->out_lock); + if (PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP) && ps->rtcp_sibling - && MEDIA_ISSET(ps->media, RTCP_MUX)) + && MEDIA_ISSET(ps->media, RTCP_MUX) + && ps->rtcp_sibling != ps) { + // nested locks! + mutex_lock(&ps->rtcp_sibling->in_lock); + mutex_lock(&ps->rtcp_sibling->out_lock); if (dtls_setup_crypto(ps->rtcp_sibling, d)) /* XXX ?? */ ; + mutex_unlock(&ps->rtcp_sibling->out_lock); + mutex_unlock(&ps->rtcp_sibling->in_lock); } }