Memory Leak Fix

1. In `wolfSSL_d2i_DHparams()`, when setting the internal key on a
   WOLFSSL_KEY, set the flag inSet.
2. Not a leak, but in `wolfSSL_EVP_PKEY_set1_DH()`, only allocate one
   buffer to store the flat key. Saves an alloc, memcpy, and free.
This commit is contained in:
John Safranek 2020-04-17 16:31:38 -07:00
parent 61f3783111
commit ccd096e1bb
No known key found for this signature in database
GPG Key ID: 8CE817DE0D3CCB4A
2 changed files with 4 additions and 15 deletions

View File

@ -18539,6 +18539,7 @@ WOLFSSL_DH *wolfSSL_d2i_DHparams(WOLFSSL_DH **dh, const unsigned char **pp,
wolfSSL_DH_free(newDH);
return NULL;
}
newDH->inSet = 1;
if (SetDhExternal(newDH) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("SetDhExternal failed");

View File

@ -5826,8 +5826,6 @@ int wolfSSL_EVP_PKEY_set1_DH(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_DH *key)
word32 derSz = 0;
byte* derBuf = NULL;
DhKey* dhkey = NULL;
mp_int pubKey;
mp_int privKey;
WOLFSSL_ENTER("wolfSSL_EVP_PKEY_set1_DH");
@ -5849,11 +5847,8 @@ int wolfSSL_EVP_PKEY_set1_DH(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_DH *key)
dhkey = (DhKey*)key->internal;
pubKey = dhkey->pub;
privKey = dhkey->priv;
havePublic = mp_unsigned_bin_size(&pubKey) > 0;
havePrivate = mp_unsigned_bin_size(&privKey) > 0;
havePublic = mp_unsigned_bin_size(&dhkey->pub) > 0;
havePrivate = mp_unsigned_bin_size(&dhkey->priv) > 0;
/* Get size of DER buffer only */
if (havePublic && !havePrivate) {
@ -5891,15 +5886,8 @@ int wolfSSL_EVP_PKEY_set1_DH(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_DH *key)
}
/* Store DH key into pkey (DER format) */
pkey->pkey.ptr = (char*)XMALLOC(derSz, pkey->heap, DYNAMIC_TYPE_DER);
if (pkey->pkey.ptr == NULL) {
WOLFSSL_MSG("key malloc failed");
XFREE(derBuf, pkey->heap, DYNAMIC_TYPE_TMP_BUFFER);
return WOLFSSL_FAILURE;
}
pkey->pkey.ptr = (char*)derBuf;
pkey->pkey_sz = derSz;
XMEMCPY(pkey->pkey.ptr, derBuf, derSz);
XFREE(derBuf, pkey->heap, DYNAMIC_TYPE_TMP_BUFFER);
return WOLFSSL_SUCCESS;
}