x509: update to structure based atomics
authorPauli <pauli@openssl.org>
Wed, 21 Jun 2023 23:45:45 +0000 (09:45 +1000)
committerPauli <pauli@openssl.org>
Sat, 1 Jul 2023 11:18:25 +0000 (21:18 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/21260)

crypto/x509/x509_lu.c
crypto/x509/x509_set.c
crypto/x509/x509cset.c

index 247698583ccabe5babb7939754d02726c4714c20..08b8425bbe40bf519374d40f16741f8f0b146af4 100644 (file)
@@ -209,13 +209,16 @@ X509_STORE *X509_STORE_new(void)
         ERR_raise(ERR_LIB_X509, ERR_R_CRYPTO_LIB);
         goto err;
     }
-    ret->references = 1;
+
+    if (!CRYPTO_NEW_REF(&ret->references, 1))
+        goto err;
     return ret;
 
 err:
     X509_VERIFY_PARAM_free(ret->param);
     sk_X509_OBJECT_free(ret->objs);
     sk_X509_LOOKUP_free(ret->get_cert_methods);
+    CRYPTO_THREAD_lock_free(ret->lock);
     OPENSSL_free(ret);
     return NULL;
 }
@@ -228,7 +231,7 @@ void X509_STORE_free(X509_STORE *xs)
 
     if (xs == NULL)
         return;
-    CRYPTO_DOWN_REF(&xs->references, &i, xs->lock);
+    CRYPTO_DOWN_REF(&xs->references, &i);
     REF_PRINT_COUNT("X509_STORE", xs);
     if (i > 0)
         return;
@@ -246,6 +249,7 @@ void X509_STORE_free(X509_STORE *xs)
     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, xs, &xs->ex_data);
     X509_VERIFY_PARAM_free(xs->param);
     CRYPTO_THREAD_lock_free(xs->lock);
+    CRYPTO_FREE_REF(&xs->references);
     OPENSSL_free(xs);
 }
 
@@ -253,7 +257,7 @@ int X509_STORE_up_ref(X509_STORE *xs)
 {
     int i;
 
-    if (CRYPTO_UP_REF(&xs->references, &i, xs->lock) <= 0)
+    if (CRYPTO_UP_REF(&xs->references, &i) <= 0)
         return 0;
 
     REF_PRINT_COUNT("X509_STORE", xs);
index 1d400a6b90eec62cebea6aaea591d515c1db5693..d4a68918290fe2fd4d2e24fe312b239f01c089ab 100644 (file)
@@ -116,7 +116,7 @@ int X509_up_ref(X509 *x)
 {
     int i;
 
-    if (CRYPTO_UP_REF(&x->references, &i, x->lock) <= 0)
+    if (CRYPTO_UP_REF(&x->references, &i) <= 0)
         return 0;
 
     REF_PRINT_COUNT("X509", x);
index 840b15c61cf4d2ee14d0d1c79932a74337804191..3eec7d6412d9930c787224e798edcc45167b3321 100644 (file)
@@ -75,7 +75,7 @@ int X509_CRL_up_ref(X509_CRL *crl)
 {
     int i;
 
-    if (CRYPTO_UP_REF(&crl->references, &i, crl->lock) <= 0)
+    if (CRYPTO_UP_REF(&crl->references, &i) <= 0)
         return 0;
 
     REF_PRINT_COUNT("X509_CRL", crl);