From: Neil Horman Date: Fri, 8 May 2026 14:30:16 +0000 (-0400) Subject: Make EVP_KEYEXCH not do ref counting X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47e9e36946c069c437465ca6b389bfc0d00515dc;p=thirdparty%2Fopenssl.git Make EVP_KEYEXCH not do ref counting Reviewed-by: Bob Beck Reviewed-by: Nikola Pajkovsky MergeDate: Thu Jun 25 21:26:05 2026 (Merged from https://github.com/openssl/openssl/pull/31143) --- diff --git a/crypto/evp/exchange.c b/crypto/evp/exchange.c index 849bc215149..1d05f8e8572 100644 --- a/crypto/evp/exchange.c +++ b/crypto/evp/exchange.c @@ -21,12 +21,27 @@ static void evp_keyexch_free(void *data) { - EVP_KEYEXCH_free(data); + EVP_KEYEXCH *exchange = (EVP_KEYEXCH *)data; + int i; + + if (exchange == NULL) + return; + CRYPTO_DOWN_REF(&exchange->refcnt, &i); + if (i > 0) + return; + OPENSSL_free(exchange->type_name); + ossl_provider_free(exchange->prov); + CRYPTO_FREE_REF(&exchange->refcnt); + OPENSSL_free(exchange); } static int evp_keyexch_up_ref(void *data) { - return EVP_KEYEXCH_up_ref(data); + EVP_KEYEXCH *exchange = (EVP_KEYEXCH *)data; + int ref = 0; + + CRYPTO_UP_REF(&exchange->refcnt, &ref); + return 1; } static EVP_KEYEXCH *evp_keyexch_new(OSSL_PROVIDER *prov) @@ -160,25 +175,18 @@ err: void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange) { - int i; - - if (exchange == NULL) - return; - CRYPTO_DOWN_REF(&exchange->refcnt, &i); - if (i > 0) - return; - OPENSSL_free(exchange->type_name); - ossl_provider_free(exchange->prov); - CRYPTO_FREE_REF(&exchange->refcnt); - OPENSSL_free(exchange); +#ifdef OPENSSL_NO_CACHED_FETCH + evp_keyexch_free(exchange); +#endif } int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange) { - int ref = 0; - - CRYPTO_UP_REF(&exchange->refcnt, &ref); +#ifdef OPENSSL_NO_CACHED_FETCH + return evp_keyexch_up_ref(exchange); +#else return 1; +#endif } OSSL_PROVIDER *EVP_KEYEXCH_get0_provider(const EVP_KEYEXCH *exchange)