]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
ecx: update to structure based atomics
authorPauli <pauli@openssl.org>
Wed, 21 Jun 2023 23:33:40 +0000 (09:33 +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/ec/ecx_backend.c
crypto/ec/ecx_key.c
include/crypto/ecx.h

index 7a43274d51f65e78e6524073aca62afaa6be5dfd..0107a612a8b9f086affad867024bb0de455e9703 100644 (file)
@@ -113,17 +113,13 @@ ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection)
     if (ret == NULL)
         return NULL;
 
-    ret->lock = CRYPTO_THREAD_lock_new();
-    if (ret->lock == NULL) {
-        OPENSSL_free(ret);
-        return NULL;
-    }
-
     ret->libctx = key->libctx;
     ret->haspubkey = key->haspubkey;
     ret->keylen = key->keylen;
     ret->type = key->type;
-    ret->references = 1;
+
+    if (!CRYPTO_NEW_REF(&ret->references, 1))
+        goto err;
 
     if (key->propq != NULL) {
         ret->propq = OPENSSL_strdup(key->propq);
@@ -146,6 +142,7 @@ ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection)
     return ret;
 
 err:
+    CRYPTO_FREE_REF(&ret->references);
     ossl_ecx_key_free(ret);
     return NULL;
 }
index 548e49091d9281dc6cb437d8d1c8019fd97fb39d..36276ce98e47338358446af2fd0aef1ba61d2604 100644 (file)
@@ -42,24 +42,20 @@ ECX_KEY *ossl_ecx_key_new(OSSL_LIB_CTX *libctx, ECX_KEY_TYPE type, int haspubkey
         break;
     }
     ret->type = type;
-    ret->references = 1;
+
+    if (!CRYPTO_NEW_REF(&ret->references, 1))
+        goto err;
 
     if (propq != NULL) {
         ret->propq = OPENSSL_strdup(propq);
         if (ret->propq == NULL)
             goto err;
     }
-
-    ret->lock = CRYPTO_THREAD_lock_new();
-    if (ret->lock == NULL) {
-        ERR_raise(ERR_LIB_EC, ERR_R_CRYPTO_LIB);
-        goto err;
-    }
     return ret;
 err:
     if (ret != NULL) {
         OPENSSL_free(ret->propq);
-        CRYPTO_THREAD_lock_free(ret->lock);
+        CRYPTO_FREE_REF(&ret->references);
     }
     OPENSSL_free(ret);
     return NULL;
@@ -72,7 +68,7 @@ void ossl_ecx_key_free(ECX_KEY *key)
     if (key == NULL)
         return;
 
-    CRYPTO_DOWN_REF(&key->references, &i, key->lock);
+    CRYPTO_DOWN_REF(&key->references, &i);
     REF_PRINT_COUNT("ECX_KEY", key);
     if (i > 0)
         return;
@@ -80,7 +76,7 @@ void ossl_ecx_key_free(ECX_KEY *key)
 
     OPENSSL_free(key->propq);
     OPENSSL_secure_clear_free(key->privkey, key->keylen);
-    CRYPTO_THREAD_lock_free(key->lock);
+    CRYPTO_FREE_REF(&key->references);
     OPENSSL_free(key);
 }
 
@@ -93,7 +89,7 @@ int ossl_ecx_key_up_ref(ECX_KEY *key)
 {
     int i;
 
-    if (CRYPTO_UP_REF(&key->references, &i, key->lock) <= 0)
+    if (CRYPTO_UP_REF(&key->references, &i) <= 0)
         return 0;
 
     REF_PRINT_COUNT("ECX_KEY", key);
index 5ae38d7c9c9a06008bfd4fbdff0faaba5343dc40..5f100ef16c14cb78ab1aa4cbcfb88be1e8946c6b 100644 (file)
@@ -72,7 +72,6 @@ struct ecx_key_st {
     size_t keylen;
     ECX_KEY_TYPE type;
     CRYPTO_REF_COUNT references;
-    CRYPTO_RWLOCK *lock;
 };
 
 size_t ossl_ecx_key_length(ECX_KEY_TYPE type);