Loading crypto/asn1/x_pubkey.c +10 −3 Original line number Diff line number Diff line Loading @@ -72,8 +72,15 @@ static int pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) { if (operation == ASN1_OP_NEW_POST) { X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; pubkey->lock = CRYPTO_THREAD_lock_new(); if (pubkey->lock == NULL) return 0; } if (operation == ASN1_OP_FREE_POST) { X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; CRYPTO_THREAD_lock_free(pubkey->lock); EVP_PKEY_free(pubkey->pkey); } return 1; Loading Loading @@ -155,14 +162,14 @@ EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key) } /* Check to see if another thread set key->pkey first */ CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY); CRYPTO_THREAD_write_lock(key->lock); if (key->pkey) { CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY); CRYPTO_THREAD_unlock(key->lock); EVP_PKEY_free(ret); ret = key->pkey; } else { key->pkey = ret; CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY); CRYPTO_THREAD_unlock(key->lock); } return ret; Loading crypto/cms/cms_env.c +2 −1 Original line number Diff line number Diff line Loading @@ -200,7 +200,8 @@ static int cms_RecipientInfo_ktri_init(CMS_RecipientInfo *ri, X509 *recip, return 0; X509_up_ref(recip); CRYPTO_add(&pk->references, 1, CRYPTO_LOCK_EVP_PKEY); EVP_PKEY_up_ref(pk); ktri->pkey = pk; ktri->recip = recip; Loading crypto/cms/cms_sd.c +1 −1 Original line number Diff line number Diff line Loading @@ -283,8 +283,8 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, /* Call for side-effect of computing hash and caching extensions */ X509_check_purpose(signer, -1, -1); CRYPTO_add(&pk->references, 1, CRYPTO_LOCK_EVP_PKEY); X509_up_ref(signer); EVP_PKEY_up_ref(pk); si->pkey = pk; si->signer = signer; Loading crypto/evp/p_lib.c +12 −4 Original line number Diff line number Diff line Loading @@ -190,18 +190,25 @@ EVP_PKEY *EVP_PKEY_new(void) if (ret == NULL) { EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE); return (NULL); return NULL; } ret->type = EVP_PKEY_NONE; ret->save_type = EVP_PKEY_NONE; ret->references = 1; ret->save_parameters = 1; return (ret); ret->lock = CRYPTO_THREAD_lock_new(); if (ret->lock == NULL) { EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE); OPENSSL_free(ret); return NULL; } return ret; } void EVP_PKEY_up_ref(EVP_PKEY *pkey) { CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); int i; CRYPTO_atomic_add(&pkey->references, 1, &i, pkey->lock); } /* Loading Loading @@ -416,7 +423,7 @@ void EVP_PKEY_free(EVP_PKEY *x) if (x == NULL) return; i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_EVP_PKEY); CRYPTO_atomic_add(&x->references, -1, &i, x->lock); REF_PRINT_COUNT("EVP_PKEY", x); if (i > 0) return; Loading @@ -437,6 +444,7 @@ static void EVP_PKEY_free_it(EVP_PKEY *x) ENGINE_finish(x->engine); x->engine = NULL; #endif CRYPTO_THREAD_lock_free(x->lock); } static int unsup_alg(BIO *out, const EVP_PKEY *pkey, int indent, Loading crypto/evp/pmeth_fn.c +1 −1 Original line number Diff line number Diff line Loading @@ -324,7 +324,7 @@ int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer) return ret; } CRYPTO_add(&peer->references, 1, CRYPTO_LOCK_EVP_PKEY); EVP_PKEY_up_ref(peer); return 1; } Loading Loading
crypto/asn1/x_pubkey.c +10 −3 Original line number Diff line number Diff line Loading @@ -72,8 +72,15 @@ static int pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) { if (operation == ASN1_OP_NEW_POST) { X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; pubkey->lock = CRYPTO_THREAD_lock_new(); if (pubkey->lock == NULL) return 0; } if (operation == ASN1_OP_FREE_POST) { X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; CRYPTO_THREAD_lock_free(pubkey->lock); EVP_PKEY_free(pubkey->pkey); } return 1; Loading Loading @@ -155,14 +162,14 @@ EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key) } /* Check to see if another thread set key->pkey first */ CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY); CRYPTO_THREAD_write_lock(key->lock); if (key->pkey) { CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY); CRYPTO_THREAD_unlock(key->lock); EVP_PKEY_free(ret); ret = key->pkey; } else { key->pkey = ret; CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY); CRYPTO_THREAD_unlock(key->lock); } return ret; Loading
crypto/cms/cms_env.c +2 −1 Original line number Diff line number Diff line Loading @@ -200,7 +200,8 @@ static int cms_RecipientInfo_ktri_init(CMS_RecipientInfo *ri, X509 *recip, return 0; X509_up_ref(recip); CRYPTO_add(&pk->references, 1, CRYPTO_LOCK_EVP_PKEY); EVP_PKEY_up_ref(pk); ktri->pkey = pk; ktri->recip = recip; Loading
crypto/cms/cms_sd.c +1 −1 Original line number Diff line number Diff line Loading @@ -283,8 +283,8 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, /* Call for side-effect of computing hash and caching extensions */ X509_check_purpose(signer, -1, -1); CRYPTO_add(&pk->references, 1, CRYPTO_LOCK_EVP_PKEY); X509_up_ref(signer); EVP_PKEY_up_ref(pk); si->pkey = pk; si->signer = signer; Loading
crypto/evp/p_lib.c +12 −4 Original line number Diff line number Diff line Loading @@ -190,18 +190,25 @@ EVP_PKEY *EVP_PKEY_new(void) if (ret == NULL) { EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE); return (NULL); return NULL; } ret->type = EVP_PKEY_NONE; ret->save_type = EVP_PKEY_NONE; ret->references = 1; ret->save_parameters = 1; return (ret); ret->lock = CRYPTO_THREAD_lock_new(); if (ret->lock == NULL) { EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE); OPENSSL_free(ret); return NULL; } return ret; } void EVP_PKEY_up_ref(EVP_PKEY *pkey) { CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); int i; CRYPTO_atomic_add(&pkey->references, 1, &i, pkey->lock); } /* Loading Loading @@ -416,7 +423,7 @@ void EVP_PKEY_free(EVP_PKEY *x) if (x == NULL) return; i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_EVP_PKEY); CRYPTO_atomic_add(&x->references, -1, &i, x->lock); REF_PRINT_COUNT("EVP_PKEY", x); if (i > 0) return; Loading @@ -437,6 +444,7 @@ static void EVP_PKEY_free_it(EVP_PKEY *x) ENGINE_finish(x->engine); x->engine = NULL; #endif CRYPTO_THREAD_lock_free(x->lock); } static int unsup_alg(BIO *out, const EVP_PKEY *pkey, int indent, Loading
crypto/evp/pmeth_fn.c +1 −1 Original line number Diff line number Diff line Loading @@ -324,7 +324,7 @@ int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer) return ret; } CRYPTO_add(&peer->references, 1, CRYPTO_LOCK_EVP_PKEY); EVP_PKEY_up_ref(peer); return 1; } Loading