aboutsummaryrefslogtreecommitdiff
path: root/crypto/dsa/dsa_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/dsa/dsa_lib.c')
-rw-r--r--crypto/dsa/dsa_lib.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/crypto/dsa/dsa_lib.c b/crypto/dsa/dsa_lib.c
index 2ae3f8e36b26..db6e3b059b4d 100644
--- a/crypto/dsa/dsa_lib.c
+++ b/crypto/dsa/dsa_lib.c
@@ -134,15 +134,18 @@ static DSA *dsa_new_intern(ENGINE *engine, OSSL_LIB_CTX *libctx)
{
DSA *ret = OPENSSL_zalloc(sizeof(*ret));
- if (ret == NULL) {
- ERR_raise(ERR_LIB_DSA, ERR_R_MALLOC_FAILURE);
+ if (ret == NULL)
return NULL;
- }
- ret->references = 1;
ret->lock = CRYPTO_THREAD_lock_new();
if (ret->lock == NULL) {
- ERR_raise(ERR_LIB_DSA, ERR_R_MALLOC_FAILURE);
+ ERR_raise(ERR_LIB_DSA, ERR_R_CRYPTO_LIB);
+ OPENSSL_free(ret);
+ return NULL;
+ }
+
+ if (!CRYPTO_NEW_REF(&ret->references, 1)) {
+ CRYPTO_THREAD_lock_free(ret->lock);
OPENSSL_free(ret);
return NULL;
}
@@ -214,8 +217,8 @@ void DSA_free(DSA *r)
if (r == NULL)
return;
- CRYPTO_DOWN_REF(&r->references, &i, r->lock);
- REF_PRINT_COUNT("DSA", r);
+ CRYPTO_DOWN_REF(&r->references, &i);
+ REF_PRINT_COUNT("DSA", i, r);
if (i > 0)
return;
REF_ASSERT_ISNT(i < 0);
@@ -231,6 +234,7 @@ void DSA_free(DSA *r)
#endif
CRYPTO_THREAD_lock_free(r->lock);
+ CRYPTO_FREE_REF(&r->references);
ossl_ffc_params_cleanup(&r->params);
BN_clear_free(r->pub_key);
@@ -242,10 +246,10 @@ int DSA_up_ref(DSA *r)
{
int i;
- if (CRYPTO_UP_REF(&r->references, &i, r->lock) <= 0)
+ if (CRYPTO_UP_REF(&r->references, &i) <= 0)
return 0;
- REF_PRINT_COUNT("DSA", r);
+ REF_PRINT_COUNT("DSA", i, r);
REF_ASSERT_ISNT(i < 2);
return ((i > 1) ? 1 : 0);
}
@@ -349,13 +353,7 @@ FFC_PARAMS *ossl_dsa_get0_params(DSA *dsa)
int ossl_dsa_ffc_params_fromdata(DSA *dsa, const OSSL_PARAM params[])
{
int ret;
- FFC_PARAMS *ffc;
-
- if (dsa == NULL)
- return 0;
- ffc = ossl_dsa_get0_params(dsa);
- if (ffc == NULL)
- return 0;
+ FFC_PARAMS *ffc = ossl_dsa_get0_params(dsa);
ret = ossl_ffc_params_fromdata(ffc, params);
if (ret)