From a6b2d1621bb0344fc82062c61984e7dbd83f483c Mon Sep 17 00:00:00 2001 From: Hideki Miyazaki Date: Thu, 29 Aug 2019 13:42:18 +0900 Subject: [PATCH] Free memory for a msg buffer when calling wc_ShaxxxFree() --- wolfcrypt/src/port/Renesas/renesas_tsip_sha.c | 12 ++++++++++++ wolfcrypt/src/sha.c | 8 +++++++- wolfcrypt/src/sha256.c | 4 +++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c b/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c index d7007fd84..b9d212a4e 100644 --- a/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c +++ b/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c @@ -79,12 +79,24 @@ static int TSIPHashUpdate(wolfssl_TSIP_Hash* hash, const byte* data, word32 sz) hash->msg = (byte*)XMALLOC(hash->used + sz, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); } else { +#ifdef FREERTOS + byte* pt = (byte*)XMALLOC(hash->used + sz, hash->heap, + DYNAMIC_TYPE_TMP_BUFFER); + if (pt == NULL) { + return MEMORY_E; + } + XMEMCPY(pt, hash->msg, hash->used); + XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); + hash->msg = NULL; + hash->msg = pt; +#else byte* pt = (byte*)XREALLOC(hash->msg, hash->used + sz, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); if (pt == NULL) { return MEMORY_E; } hash->msg = pt; +#endif } if (hash->msg == NULL) { return MEMORY_E; diff --git a/wolfcrypt/src/sha.c b/wolfcrypt/src/sha.c index 8fcb41514..72f3af886 100644 --- a/wolfcrypt/src/sha.c +++ b/wolfcrypt/src/sha.c @@ -667,6 +667,13 @@ void wc_ShaFree(wc_Sha* sha) #ifdef WOLFSSL_PIC32MZ_HASH wc_ShaPic32Free(sha); #endif +#if (defined(WOLFSSL_RENESAS_TSIP_CRYPT) && \ + !defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)) + if (sha->msg != NULL) { + XFREE(sha->msg, sha->heap, DYNAMIC_TYPE_TMP_BUFFER); + sha->msg = NULL; + } +#endif } #endif /* !WOLFSSL_TI_HASH */ @@ -729,7 +736,6 @@ int wc_ShaCopy(wc_Sha* src, wc_Sha* dst) #if defined(WOLFSSL_HASH_FLAGS) || defined(WOLF_CRYPTO_CB) dst->flags |= WC_HASH_FLAG_ISCOPY; #endif - return ret; } #endif /* defined(WOLFSSL_RENESAS_TSIP_CRYPT) ... */ diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c index 34e76aa5c..f48a412ee 100644 --- a/wolfcrypt/src/sha256.c +++ b/wolfcrypt/src/sha256.c @@ -1362,7 +1362,9 @@ void wc_Sha256Free(wc_Sha256* sha256) wc_DevCryptoFree(&sha256->ctx); #endif /* WOLFSSL_DEVCRYPTO */ #if (defined(WOLFSSL_AFALG_HASH) && defined(WOLFSSL_AFALG_HASH_KEEP)) || \ - (defined(WOLFSSL_DEVCRYPTO_HASH) && defined(WOLFSSL_DEVCRYPTO_HASH_KEEP)) + (defined(WOLFSSL_DEVCRYPTO_HASH) && defined(WOLFSSL_DEVCRYPTO_HASH_KEEP)) || \ + (defined(WOLFSSL_RENESAS_TSIP_CRYPT) && \ + !defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)) if (sha256->msg != NULL) { XFREE(sha256->msg, sha256->heap, DYNAMIC_TYPE_TMP_BUFFER); sha256->msg = NULL;