diff options
Diffstat (limited to 'googlepatches/google-9-rdbx-leak-plug.patch')
-rw-r--r-- | googlepatches/google-9-rdbx-leak-plug.patch | 298 |
1 files changed, 0 insertions, 298 deletions
diff --git a/googlepatches/google-9-rdbx-leak-plug.patch b/googlepatches/google-9-rdbx-leak-plug.patch deleted file mode 100644 index f53861d..0000000 --- a/googlepatches/google-9-rdbx-leak-plug.patch +++ /dev/null @@ -1,298 +0,0 @@ -diff --git a/google3/third_party/libsrtp/include/srtp_priv.h b/google3/third_party/libsrtp/include/srtp_priv.h -index cf2274e..3bed757 100644 ---- a/google3/third_party/libsrtp/include/srtp_priv.h -+++ b/google3/third_party/libsrtp/include/srtp_priv.h -@@ -189,6 +189,13 @@ srtp_stream_init(srtp_stream_t srtp, - - - /* -+ * Uninitializes and Deallocates a stream. -+ */ -+err_status_t -+srtp_stream_uninit_and_dealloc(srtp_stream_t stream, -+ srtp_stream_t stream_template); -+ -+/* - * libsrtp internal datatypes - */ - -diff --git a/google3/third_party/libsrtp/srtp/srtp.c b/google3/third_party/libsrtp/srtp/srtp.c -index 3fc52ee..314c3e4 100644 ---- a/google3/third_party/libsrtp/srtp/srtp.c -+++ b/google3/third_party/libsrtp/srtp/srtp.c -@@ -92,35 +92,31 @@ srtp_stream_alloc(srtp_stream_ctx_t **str_ptr, - str = (srtp_stream_ctx_t *) crypto_alloc(sizeof(srtp_stream_ctx_t)); - if (str == NULL) - return err_status_alloc_fail; -- *str_ptr = str; -- -+ *str_ptr = str; -+ - /* allocate cipher */ - stat = crypto_kernel_alloc_cipher(p->rtp.cipher_type, - &str->rtp_cipher, - p->rtp.cipher_key_len); - if (stat) { -- crypto_free(str); -- return stat; -+ goto err_rtp_cipher_alloc; - } - - /* allocate auth function */ - stat = crypto_kernel_alloc_auth(p->rtp.auth_type, - &str->rtp_auth, - p->rtp.auth_key_len, -- p->rtp.auth_tag_len); -+ p->rtp.auth_tag_len); -+ - if (stat) { -- cipher_dealloc(str->rtp_cipher); -- crypto_free(str); -- return stat; -+ goto err_rtp_auth_alloc; - } -- -+ - /* allocate key limit structure */ - str->limit = (key_limit_ctx_t*) crypto_alloc(sizeof(key_limit_ctx_t)); - if (str->limit == NULL) { -- auth_dealloc(str->rtp_auth); -- cipher_dealloc(str->rtp_cipher); -- crypto_free(str); -- return err_status_alloc_fail; -+ stat = err_status_alloc_fail; -+ goto err_limit_alloc; - } - - /* -@@ -129,13 +125,9 @@ srtp_stream_alloc(srtp_stream_ctx_t **str_ptr, - */ - stat = crypto_kernel_alloc_cipher(p->rtcp.cipher_type, - &str->rtcp_cipher, -- p->rtcp.cipher_key_len); -+ p->rtcp.cipher_key_len); - if (stat) { -- auth_dealloc(str->rtp_auth); -- cipher_dealloc(str->rtp_cipher); -- crypto_free(str->limit); -- crypto_free(str); -- return stat; -+ goto err_rtcp_cipher_alloc; - } - - /* allocate auth function */ -@@ -144,33 +136,37 @@ srtp_stream_alloc(srtp_stream_ctx_t **str_ptr, - p->rtcp.auth_key_len, - p->rtcp.auth_tag_len); - if (stat) { -- cipher_dealloc(str->rtcp_cipher); -- auth_dealloc(str->rtp_auth); -- cipher_dealloc(str->rtp_cipher); -- crypto_free(str->limit); -- crypto_free(str); -- return stat; -- } -+ goto err_rtcp_auth_alloc; -+ } - - /* allocate ekt data associated with stream */ - stat = ekt_alloc(&str->ekt, p->ekt); - if (stat) { -- auth_dealloc(str->rtcp_auth); -- cipher_dealloc(str->rtcp_cipher); -- auth_dealloc(str->rtp_auth); -- cipher_dealloc(str->rtp_cipher); -- crypto_free(str->limit); -- crypto_free(str); -- return stat; -+ goto err_ekt_alloc; - } - - return err_status_ok; -+ -+err_ekt_alloc: -+ auth_dealloc(str->rtcp_auth); -+err_rtcp_auth_alloc: -+ cipher_dealloc(str->rtcp_cipher); -+err_rtcp_cipher_alloc: -+ crypto_free(str->limit); -+err_limit_alloc: -+ auth_dealloc(str->rtp_auth); -+err_rtp_auth_alloc: -+ cipher_dealloc(str->rtp_cipher); -+err_rtp_cipher_alloc: -+ crypto_free(str); -+ return stat; - } - - err_status_t --srtp_stream_dealloc(srtp_t session, srtp_stream_ctx_t *stream) { -+srtp_stream_dealloc(srtp_stream_ctx_t *stream, -+ srtp_stream_ctx_t *stream_template) { - err_status_t status; -- -+ - /* - * we use a conservative deallocation strategy - if any deallocation - * fails, then we report that fact without trying to deallocate -@@ -178,41 +174,29 @@ srtp_stream_dealloc(srtp_t session, srtp_stream_ctx_t *stream) { - */ - - /* deallocate cipher, if it is not the same as that in template */ -- if (session->stream_template -- && stream->rtp_cipher == session->stream_template->rtp_cipher) { -- /* do nothing */ -- } else { -+ if (!stream_template || stream->rtp_cipher != stream_template->rtp_cipher) { - status = cipher_dealloc(stream->rtp_cipher); - if (status) - return status; - } - - /* deallocate auth function, if it is not the same as that in template */ -- if (session->stream_template -- && stream->rtp_auth == session->stream_template->rtp_auth) { -- /* do nothing */ -- } else { -+ if (!stream_template || stream->rtp_auth != stream_template->rtp_auth) { - status = auth_dealloc(stream->rtp_auth); - if (status) - return status; - } - - /* deallocate key usage limit, if it is not the same as that in template */ -- if (session->stream_template -- && stream->limit == session->stream_template->limit) { -- /* do nothing */ -- } else { -+ if (!stream_template || stream->limit != stream_template->limit) { - crypto_free(stream->limit); -- } -+ } - -- /* -+ /* - * deallocate rtcp cipher, if it is not the same as that in -- * template -+ * template - */ -- if (session->stream_template -- && stream->rtcp_cipher == session->stream_template->rtcp_cipher) { -- /* do nothing */ -- } else { -+ if (!stream_template || stream->rtcp_cipher != stream_template->rtcp_cipher) { - status = cipher_dealloc(stream->rtcp_cipher); - if (status) - return status; -@@ -222,17 +206,14 @@ srtp_stream_dealloc(srtp_t session, srtp_stream_ctx_t *stream) { - * deallocate rtcp auth function, if it is not the same as that in - * template - */ -- if (session->stream_template -- && stream->rtcp_auth == session->stream_template->rtcp_auth) { -- /* do nothing */ -- } else { -+ if (!stream_template || stream->rtcp_auth != stream_template->rtcp_auth) { - status = auth_dealloc(stream->rtcp_auth); - if (status) - return status; - } - - /* DAM - need to deallocate EKT here */ -- -+ - /* deallocate srtp stream context */ - crypto_free(stream); - -@@ -549,7 +530,12 @@ srtp_stream_init(srtp_stream_ctx_t *srtp, - } - - return err_status_ok; -- } -+} -+ -+err_status_t -+srtp_stream_uninit(srtp_stream_ctx_t *srtp) { -+ return rdbx_uninit(&srtp->rtp_rdbx); -+} - - - /* -@@ -1201,28 +1187,16 @@ srtp_dealloc(srtp_t session) { - stream = session->stream_list; - while (stream != NULL) { - srtp_stream_t next = stream->next; -- status = srtp_stream_dealloc(session, stream); -- if (status) -+ status = srtp_stream_uninit_and_dealloc(stream, session->stream_template); -+ if (status) { - return status; -+ } - stream = next; - } -- -+ - /* deallocate stream template, if there is one */ - if (session->stream_template != NULL) { -- status = auth_dealloc(session->stream_template->rtcp_auth); -- if (status) -- return status; -- status = cipher_dealloc(session->stream_template->rtcp_cipher); -- if (status) -- return status; -- crypto_free(session->stream_template->limit); -- status = cipher_dealloc(session->stream_template->rtp_cipher); -- if (status) -- return status; -- status = auth_dealloc(session->stream_template->rtp_auth); -- if (status) -- return status; -- crypto_free(session->stream_template); -+ status = srtp_stream_uninit_and_dealloc(session->stream_template, NULL); - } - - /* deallocate session context */ -@@ -1287,7 +1261,6 @@ srtp_add_stream(srtp_t session, - crypto_free(tmp); - return err_status_bad_param; - } -- - return err_status_ok; - } - -@@ -1334,12 +1307,11 @@ srtp_create(srtp_t *session, /* handle for session */ - err_status_t - srtp_remove_stream(srtp_t session, uint32_t ssrc) { - srtp_stream_ctx_t *stream, *last_stream; -- err_status_t status; - - /* sanity check arguments */ - if (session == NULL) - return err_status_bad_param; -- -+ - /* find stream in list; complain if not found */ - last_stream = stream = session->stream_list; - while ((stream != NULL) && (ssrc != stream->ssrc)) { -@@ -1352,8 +1324,20 @@ srtp_remove_stream(srtp_t session, uint32_t ssrc) { - /* remove stream from the list */ - last_stream->next = stream->next; - -+ return srtp_stream_uninit_and_dealloc(stream, session->stream_template); -+} -+ -+err_status_t -+srtp_stream_uninit_and_dealloc(srtp_stream_ctx_t *stream, -+ srtp_stream_ctx_t *stream_template) { -+ err_status_t status; -+ /* deallocate rdbx data */ -+ status = srtp_stream_uninit(stream); -+ if (status) -+ return status; -+ - /* deallocate the stream */ -- status = srtp_stream_dealloc(session, stream); -+ status = srtp_stream_dealloc(stream, stream_template); - if (status) - return status; - |