Ensure that memory allocated for the ticket is freed
authorMatt Caswell <matt@openssl.org>
Tue, 15 Mar 2016 11:38:56 +0000 (11:38 +0000)
committerMatt Caswell <matt@openssl.org>
Fri, 18 Mar 2016 11:56:34 +0000 (11:56 +0000)
If a call to EVP_DecryptUpdate fails then a memory leak could occur.
Ensure that the memory is freed appropriately.

Issue reported by Guido Vranken.

Reviewed-by: Richard Levitte <levitte@openssl.org>
ssl/t1_lib.c

index d9ba99d7358466d00a041f069a317b9b5059000b..0e7a262a0d0bd9ceaa813118b09e60e10ee73aa1 100644 (file)
@@ -3415,8 +3415,10 @@ static int tls_decrypt_ticket(SSL *s, const unsigned char *etick,
     p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx);
     eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx);
     sdec = OPENSSL_malloc(eticklen);
-    if (!sdec || EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen) <= 0) {
+    if (sdec == NULL
+            || EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen) <= 0) {
         EVP_CIPHER_CTX_cleanup(&ctx);
+        OPENSSL_free(sdec);
         return -1;
     }
     if (EVP_DecryptFinal(&ctx, sdec + slen, &mlen) <= 0) {