From d87cd2cc053ad56d048abebc98a8ccee2e00fee2 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Wed, 25 Oct 2023 17:23:04 +1000 Subject: [PATCH] ProcessBuffer: fix free call 'info' was freed before use when OPENSSL_EXTRA is defined. --- src/ssl.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 3e48f4569..ae8ca740d 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -7353,12 +7353,12 @@ int ProcessBuffer(WOLFSSL_CTX* ctx, const unsigned char* buff, } #endif /* WOLFSSL_ENCRYPTED_KEYS && !NO_PWDBASED */ - #ifdef WOLFSSL_SMALL_STACK - XFREE(info, heap, DYNAMIC_TYPE_ENCRYPTEDINFO); - #endif - - if (ret != 0) + if (ret != 0) { + #ifdef WOLFSSL_SMALL_STACK + XFREE(info, heap, DYNAMIC_TYPE_ENCRYPTEDINFO); + #endif return ret; + } if (keyFormat == 0) { #ifdef OPENSSL_EXTRA /* Reaching this point probably means that the @@ -7366,10 +7366,17 @@ int ProcessBuffer(WOLFSSL_CTX* ctx, const unsigned char* buff, if (info->passwd_cb) EVPerr(0, EVP_R_BAD_DECRYPT); #endif + #ifdef WOLFSSL_SMALL_STACK + XFREE(info, heap, DYNAMIC_TYPE_ENCRYPTEDINFO); + #endif WOLFSSL_ERROR(WOLFSSL_BAD_FILE); return WOLFSSL_BAD_FILE; } + #ifdef WOLFSSL_SMALL_STACK + XFREE(info, heap, DYNAMIC_TYPE_ENCRYPTEDINFO); + #endif + (void)devId; } else if (type == CERT_TYPE) {