From ccbb7268593432fc511c46a27d69d57291b0d6c4 Mon Sep 17 00:00:00 2001 From: Anthony Hu Date: Mon, 22 Jan 2024 10:27:59 -0500 Subject: [PATCH 1/2] Remove dead code in EccKeyParamCopy Found with: ./configure --enable-ecccustcurves --enable-asn=original CFLAGS=-DWOLFSSL_ECC_CURVE_STATIC --- wolfcrypt/src/asn.c | 1 - 1 file changed, 1 deletion(-) diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 6c2dc443c..6d204044b 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -33218,7 +33218,6 @@ static int EccKeyParamCopy(char** dst, char* src) else { XSTRNCPY(*dst, src, MAX_ECC_STRING); } - XFREE(src, key->heap, DYNAMIC_TYPE_ECC_BUFFER); #endif return ret; From dcc946575b528b305077092967c75d708f09d405 Mon Sep 17 00:00:00 2001 From: David Garske Date: Mon, 22 Jan 2024 13:18:24 -0800 Subject: [PATCH 2/2] Fix missing heap hint in `EccKeyParamCopy`. The XFREE is required or it will leak memory allocated in `ASNToHexString`. This only applies to `WOLFSSL_CUSTOM_CURVES` && `!WOLFSSL_ASN_TEMPLATE`. --- wolfcrypt/src/asn.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 6d204044b..b1a8997d1 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -33197,7 +33197,7 @@ static int ASNToHexString(const byte* input, word32* inOutIdx, char** out, return 0; } -static int EccKeyParamCopy(char** dst, char* src) +static int EccKeyParamCopy(char** dst, char* src, void* heap) { int ret = 0; #ifdef WOLFSSL_ECC_CURVE_STATIC @@ -33218,7 +33218,9 @@ static int EccKeyParamCopy(char** dst, char* src) else { XSTRNCPY(*dst, src, MAX_ECC_STRING); } + XFREE(src, heap, DYNAMIC_TYPE_ECC_BUFFER); #endif + (void)heap; return ret; } @@ -33326,10 +33328,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx, key->heap, DYNAMIC_TYPE_ECC_BUFFER); if (ret == 0) { #ifndef WOLFSSL_ECC_CURVE_STATIC - ret = EccKeyParamCopy((char**)&curve->prime, p); + ret = EccKeyParamCopy((char**)&curve->prime, p, key->heap); #else const char *_tmp_ptr = &curve->prime[0]; - ret = EccKeyParamCopy((char**)&_tmp_ptr, p); + ret = EccKeyParamCopy((char**)&_tmp_ptr, p, key->heap); #endif } } @@ -33345,10 +33347,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx, key->heap, DYNAMIC_TYPE_ECC_BUFFER); if (ret == 0) { #ifndef WOLFSSL_ECC_CURVE_STATIC - ret = EccKeyParamCopy((char**)&curve->Af, af); + ret = EccKeyParamCopy((char**)&curve->Af, af, key->heap); #else const char *_tmp_ptr = &curve->Af[0]; - ret = EccKeyParamCopy((char**)&_tmp_ptr, af); + ret = EccKeyParamCopy((char**)&_tmp_ptr, af, key->heap); #endif } } @@ -33358,10 +33360,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx, key->heap, DYNAMIC_TYPE_ECC_BUFFER); if (ret == 0) { #ifndef WOLFSSL_ECC_CURVE_STATIC - ret = EccKeyParamCopy((char**)&curve->Bf, bf); + ret = EccKeyParamCopy((char**)&curve->Bf, bf, key->heap); #else const char *_tmp_ptr = &curve->Bf[0]; - ret = EccKeyParamCopy((char**)&_tmp_ptr, bf); + ret = EccKeyParamCopy((char**)&_tmp_ptr, bf, key->heap); #endif } } @@ -33418,10 +33420,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx, key->heap, DYNAMIC_TYPE_ECC_BUFFER); if (ret == 0) { #ifndef WOLFSSL_ECC_CURVE_STATIC - ret = EccKeyParamCopy((char**)&curve->order, o); + ret = EccKeyParamCopy((char**)&curve->order, o, key->heap); #else const char *_tmp_ptr = &curve->order[0]; - ret = EccKeyParamCopy((char**)&_tmp_ptr, o); + ret = EccKeyParamCopy((char**)&_tmp_ptr, o, key->heap); #endif } }