]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_event_multicast] Fix memory leak 45/head
authorSebastian Kemper <sebastian_ml@gmx.net>
Wed, 9 Oct 2019 17:10:26 +0000 (19:10 +0200)
committerSebastian Kemper <sebastian_ml@gmx.net>
Sat, 12 Oct 2019 19:43:14 +0000 (21:43 +0200)
Taken from FS-11193:

In "event_handler()" function, when encrypting data using openssl 1.1.0,
the context ctx is allocated by "EVP_CIPHER_CTX_new()", then data is
encrypted, and at the end, EVP_CIPHER_CTX_cleanup is called. This
function resets the context (the function itself is deprecated, and has
been renamed to "EVP_CIPHER_CTX_reset) so that it can be used again. The
correct call would be to "EVP_CIPHER_CTX_free()", which frees the
memory. The code for openssl 1.0 is OK, since the "ctx" struct is kept
in stack.  The same thing happens during decryption. "ctx" is allocated,
but never freed.

Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c

index 7fe2911ba684e0317346c57f502c2252db92ea31..f9fa8ff02bb002c61947ff99364b664328d7fe35 100644 (file)
@@ -324,7 +324,7 @@ static void event_handler(switch_event_t *event)
                                                                          &tmplen, (unsigned char *) MAGIC, (int) strlen((char *) MAGIC));
                                        outlen += tmplen;
                                        EVP_EncryptFinal(ctx, (unsigned char *) buf + SWITCH_UUID_FORMATTED_LENGTH + outlen, &tmplen);
-                                       EVP_CIPHER_CTX_cleanup(ctx);
+                                       EVP_CIPHER_CTX_free(ctx);
 #else
                                        EVP_CIPHER_CTX_init(&ctx);
                                        EVP_EncryptInit(&ctx, EVP_bf_cbc(), NULL, NULL);
@@ -577,7 +577,7 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_multicast_runtime)
                        EVP_DecryptInit(ctx, NULL, (unsigned char *) globals.psk, (unsigned char *) uuid_str);
                        EVP_DecryptUpdate(ctx, (unsigned char *) tmp, &outl, (unsigned char *) packet, (int) len);
                        EVP_DecryptFinal(ctx, (unsigned char *) tmp + outl, &tmplen);
-                       EVP_CIPHER_CTX_cleanup(ctx);
+                       EVP_CIPHER_CTX_free(ctx);
 #else
                        EVP_CIPHER_CTX_init(&ctx);
                        EVP_DecryptInit(&ctx, EVP_bf_cbc(), NULL, NULL);