Commit 47e9e36946 for openssl.org
commit 47e9e36946c069c437465ca6b389bfc0d00515dc
Author: Neil Horman <nhorman@openssl.org>
Date: Fri May 8 10:30:16 2026 -0400
Make EVP_KEYEXCH not do ref counting
Reviewed-by: Bob Beck <beck@openssl.org>
Reviewed-by: Nikola Pajkovsky <nikolap@openssl.org>
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 849bc21514..1d05f8e857 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)