Commit d3cb703b35 for openssl.org
commit d3cb703b35b11432959836a1864cc4e52d723879
Author: Neil Horman <nhorman@openssl.org>
Date: Fri May 8 10:13:59 2026 -0400
Make EVP_SIGNATURE not do ref counting
Reviewed-by: Bob Beck <beck@openssl.org>
Reviewed-by: Nikola Pajkovsky <nikolap@openssl.org>
MergeDate: Thu Jun 25 21:26:00 2026
(Merged from https://github.com/openssl/openssl/pull/31143)
diff --git a/crypto/evp/signature.c b/crypto/evp/signature.c
index 3737bc6ba4..15e4116400 100644
--- a/crypto/evp/signature.c
+++ b/crypto/evp/signature.c
@@ -22,12 +22,27 @@
static void evp_signature_free(void *data)
{
- EVP_SIGNATURE_free(data);
+ EVP_SIGNATURE *signature = (EVP_SIGNATURE *)data;
+ int i;
+
+ if (signature == NULL)
+ return;
+ CRYPTO_DOWN_REF(&signature->refcnt, &i);
+ if (i > 0)
+ return;
+ OPENSSL_free(signature->type_name);
+ ossl_provider_free(signature->prov);
+ CRYPTO_FREE_REF(&signature->refcnt);
+ OPENSSL_free(signature);
}
static int evp_signature_up_ref(void *data)
{
- return EVP_SIGNATURE_up_ref(data);
+ EVP_SIGNATURE *signature = (EVP_SIGNATURE *)data;
+ int ref = 0;
+
+ CRYPTO_UP_REF(&signature->refcnt, &ref);
+ return 1;
}
static EVP_SIGNATURE *evp_signature_new(OSSL_PROVIDER *prov)
@@ -454,25 +469,18 @@ err:
void EVP_SIGNATURE_free(EVP_SIGNATURE *signature)
{
- int i;
-
- if (signature == NULL)
- return;
- CRYPTO_DOWN_REF(&signature->refcnt, &i);
- if (i > 0)
- return;
- OPENSSL_free(signature->type_name);
- ossl_provider_free(signature->prov);
- CRYPTO_FREE_REF(&signature->refcnt);
- OPENSSL_free(signature);
+#ifdef OPENSSL_NO_CACHED_FETCH
+ evp_signature_free(signature);
+#endif
}
int EVP_SIGNATURE_up_ref(EVP_SIGNATURE *signature)
{
- int ref = 0;
-
- CRYPTO_UP_REF(&signature->refcnt, &ref);
+#ifdef OPENSSL_NO_CACHED_FETCH
+ return evp_signature_up_ref(signature);
+#else
return 1;
+#endif
}
OSSL_PROVIDER *EVP_SIGNATURE_get0_provider(const EVP_SIGNATURE *signature)