From aea01d13135565680c7b1bc74222f5b2bf3f66c4 Mon Sep 17 00:00:00 2001 From: Pauli Date: Mon, 8 Feb 2021 11:38:21 +1000 Subject: EVP: fix reference counting for EVP_CIPHER. Under some circumstances, the reference count for a cipher wasn't updated properly. This shows up best when fetches are not being queried but would be possible if the cache flushed at a bad time. Reviewed-by: Shane Lontis Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/14126) --- crypto/evp/evp_enc.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'crypto/evp/evp_enc.c') diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c index eb8c0faf14..b804d74914 100644 --- a/crypto/evp/evp_enc.c +++ b/crypto/evp/evp_enc.c @@ -182,6 +182,14 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, #endif } + if (cipher->prov != NULL) { + if (!EVP_CIPHER_up_ref((EVP_CIPHER *)cipher)) { + ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR); + return 0; + } + EVP_CIPHER_free(ctx->fetched_cipher); + ctx->fetched_cipher = (EVP_CIPHER *)cipher; + } ctx->cipher = cipher; if (ctx->provctx == NULL) { ctx->provctx = ctx->cipher->newctx(ossl_provider_ctx(cipher->prov)); -- cgit v1.2.3