diff --git a/src/media/socket_pair.cpp b/src/media/socket_pair.cpp
index 34dd7035fddbd4e633bba6909ae8c2274569e24e..5beb98d6ad325ac6d62e7daaa29b781eb7c7ca29 100644
--- a/src/media/socket_pair.cpp
+++ b/src/media/socket_pair.cpp
@@ -25,6 +25,7 @@
 #include "ice_socket.h"
 #include "libav_utils.h"
 #include "logger.h"
+#include "security/memory.h"
 
 #include <iostream>
 #include <string>
@@ -69,6 +70,8 @@ class SRTPProtoContext {
 public:
     SRTPProtoContext(const char* out_suite, const char* out_key,
                      const char* in_suite, const char* in_key) {
+        ring_secure_memzero(&srtp_out, sizeof(srtp_out));
+        ring_secure_memzero(&srtp_in, sizeof(srtp_in));
         if (out_suite && out_key) {
             // XXX: see srtp_open from libavformat/srtpproto.c
             if (ff_srtp_set_crypto(&srtp_out, out_suite, out_key) < 0) {
diff --git a/src/media/srtp.c b/src/media/srtp.c
index e349e32c43670520abfaae8046bb40ddaabb87de..ea529460d387782976fc2137389738cdcc3d8a7f 100644
--- a/src/media/srtp.c
+++ b/src/media/srtp.c
@@ -42,10 +42,14 @@ void ff_srtp_free(struct SRTPContext *s)
         return;
     // aes and hmac have an opaque pointer type.
     // No API to safely erase them, so just re-init with "dummy keys" to sanitize them
-    av_aes_init(s->aes, zero_buffer, 128, 0);
-    av_hmac_init(s->hmac, zero_buffer, sizeof(s->rtp_auth));
-    av_freep(&s->aes);
-    av_hmac_free(s->hmac);
+    if (s->aes) {
+        av_aes_init(s->aes, zero_buffer, 128, 0);
+        av_freep(&s->aes);
+    }
+    if (s->hmac) {
+        av_hmac_init(s->hmac, zero_buffer, sizeof(s->rtp_auth));
+        av_hmac_free(s->hmac);
+    }
     ring_secure_memzero(s, sizeof(*s));
 }