Memory leak for pki_key_to_blob()
I use valgrind to mem-check all the unittests. The torture_pki_ecdsa and torture_pki_rsa report "definitely lost". The first reason is the absence of the free operations for params before calling EVP_PKEY_todata(key->key, ..., ¶ms) again at line 1512 and 1758 (pki_crypto.c). The second reason is the absence of the free operation for bd which is assigned at line 1764 (pki_crypto.c). The code can be fixed as below to solve the memory leak problems
#if OPENSSL_VERSION_NUMBER < 0x30000000L // pki_crypto.c 1506
const BIGNUM *bd, *biqmp, *bp, *bq;
RSA_get0_key(key_rsa, NULL, NULL, &bd);
RSA_get0_factors(key_rsa, &bp, &bq);
RSA_get0_crt_params(key_rsa, NULL, NULL, &biqmp);
#else
OSSL_PARAM_free(params); // Add free()
rc = EVP_PKEY_todata(key->key, EVP_PKEY_KEYPAIR, ¶ms);
if (rc != 1) {
goto fail;
}
#if OPENSSL_VERSION_NUMBER >= 0x30000000L // pki_crypto.c 1757
OSSL_PARAM_free(params); // Add free()
rc = EVP_PKEY_todata(key->key, EVP_PKEY_KEYPAIR, ¶ms);
if (rc < 0) {
goto fail;
}
#if OPENSSL_VERSION_NUMBER >= 0x30000000L // pki_crypto.c 1799
bignum_safe_free(bd); // Add free()
OSSL_PARAM_free(params);
#endif /* OPENSSL_VERSION_NUMBER */
Edited by Feynman-young