summaryrefslogtreecommitdiff
path: root/crypto/evp
diff options
context:
space:
mode:
authorAnatolii Lishchynskyi <iamnotacake@protonmail.com>2023-03-29 17:16:48 +0300
committerTomas Mraz <tomas@openssl.org>2023-04-04 12:05:25 +0200
commit34e4a962bca998cc2d6eb4be721153fbde2f4c35 (patch)
tree52b850846d2cb9f365992d8760c0e4b5b900b3e5 /crypto/evp
parent540c2d175d3c7c28bb969a74f6fe0396f0addc1a (diff)
downloadopenssl-new-34e4a962bca998cc2d6eb4be721153fbde2f4c35.tar.gz
Erase temporary buffer in EVP_PKEY_get_bn_param()
Function EVP_PKEY_get_bn_param() uses temporary buffer (on stack or heap allocated) to store serialized bignum, but after deserializing it into BIGNUM*, the buffer is not erased and may contain sensitive data. This change makes sure the buffer is erased if it was successfully filled before. Unfortunately, it does not distinguish between public and private key components, and will always erase the buffer. Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/20639)
Diffstat (limited to 'crypto/evp')
-rw-r--r--crypto/evp/p_lib.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c
index 554fad927c..fa51304c97 100644
--- a/crypto/evp/p_lib.c
+++ b/crypto/evp/p_lib.c
@@ -2176,7 +2176,14 @@ int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name,
goto err;
ret = OSSL_PARAM_get_BN(params, bn);
err:
- OPENSSL_free(buf);
+ if (buf != NULL) {
+ if (OSSL_PARAM_modified(params))
+ OPENSSL_clear_free(buf, buf_sz);
+ else
+ OPENSSL_free(buf);
+ } else if (OSSL_PARAM_modified(params)) {
+ OPENSSL_cleanse(buffer, params[0].data_size);
+ }
return ret;
}