From ed4774f606fe536ebded9e745f46dc7aa23bf99a Mon Sep 17 00:00:00 2001 From: Anthony Hu Date: Thu, 29 Jun 2023 10:08:13 -0400 Subject: [PATCH] Allocate WOLFSSL_X509_NAME with heap hint. --- src/internal.c | 2 +- src/x509.c | 20 ++++++++++++-------- wolfcrypt/src/asn.c | 4 ++-- wolfssl/ssl.h | 1 + 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/internal.c b/src/internal.c index 9e5d51c31..a6c370e02 100644 --- a/src/internal.c +++ b/src/internal.c @@ -27382,7 +27382,7 @@ static int HashSkeData(WOLFSSL* ssl, enum wc_HashType hashType, ret = GetName(cert, SUBJECT, dnSz); if (ret == 0) { - if ((name = wolfSSL_X509_NAME_new()) == NULL) + if ((name = wolfSSL_X509_NAME_new_ex(cert->heap)) == NULL) ret = MEMORY_ERROR; } diff --git a/src/x509.c b/src/x509.c index c8fea53a3..c4b7d1c4b 100644 --- a/src/x509.c +++ b/src/x509.c @@ -9477,7 +9477,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( { WOLFSSL_ENTER("wolfSSL_X509_NAME_free"); FreeX509Name(name); - XFREE(name, NULL, DYNAMIC_TYPE_X509); + XFREE(name, name->heap, DYNAMIC_TYPE_X509); } @@ -9485,20 +9485,24 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( * * returns NULL on failure, otherwise returns a new structure. */ - WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new(void) + WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new_ex(void *heap) { WOLFSSL_X509_NAME* name; - WOLFSSL_ENTER("wolfSSL_X509_NAME_new"); + WOLFSSL_ENTER("wolfSSL_X509_NAME_new_ex"); - name = (WOLFSSL_X509_NAME*)XMALLOC(sizeof(WOLFSSL_X509_NAME), NULL, + name = (WOLFSSL_X509_NAME*)XMALLOC(sizeof(WOLFSSL_X509_NAME), heap, DYNAMIC_TYPE_X509); if (name != NULL) { - InitX509Name(name, 1, NULL); + InitX509Name(name, 1, heap); } return name; } + WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new(void) { + return wolfSSL_X509_NAME_new_ex(NULL); + } + /* Creates a duplicate of a WOLFSSL_X509_NAME structure. Returns a new WOLFSSL_X509_NAME structure or NULL on failure */ WOLFSSL_X509_NAME* wolfSSL_X509_NAME_dup(WOLFSSL_X509_NAME *name) @@ -9512,7 +9516,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( return NULL; } - if (!(copy = wolfSSL_X509_NAME_new())) { + if (!(copy = wolfSSL_X509_NAME_new_ex(name->heap))) { return NULL; } @@ -10734,8 +10738,8 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out) goto cleanup; } - if (!(tmp = wolfSSL_X509_NAME_new())) { - WOLFSSL_MSG("wolfSSL_X509_NAME_new error"); + if (!(tmp = wolfSSL_X509_NAME_new_ex(cert->heap))) { + WOLFSSL_MSG("wolfSSL_X509_NAME_new_ex error"); goto cleanup; } diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 9eec8bfce..96f27928d 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -12668,7 +12668,7 @@ static int GetCertName(DecodedCert* cert, char* full, byte* hash, int nameType, #if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ !defined(WOLFCRYPT_ONLY) - dName = wolfSSL_X509_NAME_new(); + dName = wolfSSL_X509_NAME_new_ex(cert->heap); if (dName == NULL) { return MEMORY_E; } @@ -13325,7 +13325,7 @@ static int GetCertName(DecodedCert* cert, char* full, byte* hash, int nameType, #ifdef WOLFSSL_X509_NAME_AVAILABLE if (ret == 0) { /* Create an X509_NAME to hold data for OpenSSL compatability APIs. */ - dName = wolfSSL_X509_NAME_new(); + dName = wolfSSL_X509_NAME_new_ex(cert->heap); if (dName == NULL) { ret = MEMORY_E; } diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index cbaad0b00..3e70dde71 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -4226,6 +4226,7 @@ WOLFSSL_API WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_delete_entry( WOLFSSL_API int wolfSSL_X509_NAME_cmp(const WOLFSSL_X509_NAME* x, const WOLFSSL_X509_NAME* y); WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new(void); +WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new_ex(void *heap); WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_NAME_dup(WOLFSSL_X509_NAME* name); WOLFSSL_API int wolfSSL_X509_NAME_copy(WOLFSSL_X509_NAME* from, WOLFSSL_X509_NAME* to); WOLFSSL_API int wolfSSL_check_private_key(const WOLFSSL* ssl);