}
ret->key = &(ret->pkeys[SSL_PKEY_RSA]);
- ret->references = 1;
ret->sec_cb = ssl_security_default_callback;
ret->sec_level = OPENSSL_TLS_SECURITY_LEVEL;
ret->sec_ex = NULL;
- ret->lock = CRYPTO_THREAD_lock_new();
- if (ret->lock == NULL) {
- ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
+ if (!CRYPTO_NEW_REF(&ret->references, 1)) {
OPENSSL_free(ret->pkeys);
OPENSSL_free(ret);
return NULL;
return NULL;
}
- ret->references = 1;
ret->key = &ret->pkeys[cert->key - cert->pkeys];
- ret->lock = CRYPTO_THREAD_lock_new();
- if (ret->lock == NULL) {
- ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
+ if (!CRYPTO_NEW_REF(&ret->references, 1)) {
OPENSSL_free(ret->pkeys);
OPENSSL_free(ret);
return NULL;
if (c == NULL)
return;
- CRYPTO_DOWN_REF(&c->references, &i, c->lock);
+ CRYPTO_DOWN_REF(&c->references, &i);
REF_PRINT_COUNT("CERT", c);
if (i > 0)
return;
OPENSSL_free(c->psk_identity_hint);
#endif
OPENSSL_free(c->pkeys);
- CRYPTO_THREAD_lock_free(c->lock);
+ CRYPTO_FREE_REF(&c->references);
OPENSSL_free(c);
}
if (!ossl_comp_has_alg(alg)
|| data == NULL
|| (ret = OPENSSL_zalloc(sizeof(*ret))) == NULL
- || (ret->lock = CRYPTO_THREAD_lock_new()) == NULL)
+ || !CRYPTO_NEW_REF(&ret->references, 1))
goto err;
- ret->references = 1;
ret->data = data;
ret->len = len;
ret->orig_len = orig_len;
if (cc == NULL)
return;
- CRYPTO_DOWN_REF(&cc->references, &i, cc->lock);
+ CRYPTO_DOWN_REF(&cc->references, &i);
REF_PRINT_COUNT("OSSL_COMP_CERT", cc);
if (i > 0)
return;
REF_ASSERT_ISNT(i < 0);
OPENSSL_free(cc->data);
- CRYPTO_THREAD_lock_free(cc->lock);
+ CRYPTO_FREE_REF(&cc->references);
OPENSSL_free(cc);
}
int OSSL_COMP_CERT_up_ref(OSSL_COMP_CERT *cc)
{
int i;
- if (CRYPTO_UP_REF(&cc->references, &i, cc->lock) <= 0)
+ if (CRYPTO_UP_REF(&cc->references, &i) <= 0)
return 0;
REF_PRINT_COUNT("OSSL_COMP_CERT", cc);
{
ssl->type = type;
- ssl->references = 1;
ssl->lock = CRYPTO_THREAD_lock_new();
if (ssl->lock == NULL)
return 0;
+ if (!CRYPTO_NEW_REF(&ssl->references, 1)) {
+ CRYPTO_THREAD_lock_free(ssl->lock);
+ return 0;
+ }
+
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, ssl, &ssl->ex_data)) {
CRYPTO_THREAD_lock_free(ssl->lock);
+ CRYPTO_FREE_REF(&ssl->references);
ssl->lock = NULL;
return 0;
}
{
int i;
- if (CRYPTO_UP_REF(&s->references, &i, s->lock) <= 0)
+ if (CRYPTO_UP_REF(&s->references, &i) <= 0)
return 0;
REF_PRINT_COUNT("SSL", s);
if (s == NULL)
return;
- CRYPTO_DOWN_REF(&s->references, &i, s->lock);
+ CRYPTO_DOWN_REF(&s->references, &i);
REF_PRINT_COUNT("SSL", s);
if (i > 0)
return;
SSL_CTX_free(s->ctx);
CRYPTO_THREAD_lock_free(s->lock);
+ CRYPTO_FREE_REF(&s->references);
OPENSSL_free(s);
}
return 0;
}
- CRYPTO_UP_REF(&fsc->cert->references, &i, fsc->cert->lock);
+ CRYPTO_UP_REF(&fsc->cert->references, &i);
ssl_cert_free(tsc->cert);
tsc->cert = fsc->cert;
if (!SSL_set_session_id_context(t, fsc->sid_ctx, (int)fsc->sid_ctx_length)) {
ERR_raise(ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
goto err;
}
+
ret = OPENSSL_zalloc(sizeof(*ret));
if (ret == NULL)
goto err;
/* Init the reference counting before any call to SSL_CTX_free */
- ret->references = 1;
+ if (!CRYPTO_NEW_REF(&ret->references, 1))
+ goto err;
+
ret->lock = CRYPTO_THREAD_lock_new();
if (ret->lock == NULL) {
ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
{
int i;
- if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
+ if (CRYPTO_UP_REF(&ctx->references, &i) <= 0)
return 0;
REF_PRINT_COUNT("SSL_CTX", ctx);
if (a == NULL)
return;
- CRYPTO_DOWN_REF(&a->references, &i, a->lock);
+ CRYPTO_DOWN_REF(&a->references, &i);
REF_PRINT_COUNT("SSL_CTX", a);
if (i > 0)
return;
OPENSSL_free(a->server_cert_type);
CRYPTO_THREAD_lock_free(a->lock);
+ CRYPTO_FREE_REF(&a->references);
#ifdef TSAN_REQUIRES_LOCKING
CRYPTO_THREAD_lock_free(a->tsan_lock);
#endif
/* If we're not quiescent, just up_ref! */
if (!SSL_in_init(s) || !SSL_in_before(s)) {
- CRYPTO_UP_REF(&s->references, &i, s->lock);
+ CRYPTO_UP_REF(&s->references, &i);
return s;
}
size_t ticket_appdata_len;
uint32_t flags;
SSL_CTX *owner;
- CRYPTO_RWLOCK *lock;
};
/* Extended master secret support */
size_t len;
size_t orig_len;
CRYPTO_REF_COUNT references;
- CRYPTO_RWLOCK *lock;
int alg;
};
typedef struct ossl_comp_cert_st OSSL_COMP_CERT;
char *psk_identity_hint;
# endif
CRYPTO_REF_COUNT references; /* >1 only if SSL_copy_session_id is used */
- CRYPTO_RWLOCK *lock;
} CERT;
# define FP_ICC (int (*)(const void *,const void *))
return NULL;
ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */
- ss->references = 1;
/* 5 minute timeout by default */
ss->timeout = ossl_seconds2time(60 * 5 + 4);
ss->time = ossl_time_now();
ssl_session_calculate_timeout(ss);
- ss->lock = CRYPTO_THREAD_lock_new();
- if (ss->lock == NULL) {
- ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
+ if (!CRYPTO_NEW_REF(&ss->references, 1)) {
OPENSSL_free(ss);
return NULL;
}
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data)) {
- CRYPTO_THREAD_lock_free(ss->lock);
+ CRYPTO_FREE_REF(&ss->references);
OPENSSL_free(ss);
return NULL;
}
dest->next = NULL;
dest->owner = NULL;
- dest->references = 1;
-
- dest->lock = CRYPTO_THREAD_lock_new();
- if (dest->lock == NULL) {
- ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
+ if (!CRYPTO_NEW_REF(&dest->references, 1))
goto err;
- }
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, dest, &dest->ex_data)) {
ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
if (ss == NULL)
return;
- CRYPTO_DOWN_REF(&ss->references, &i, ss->lock);
+ CRYPTO_DOWN_REF(&ss->references, &i);
REF_PRINT_COUNT("SSL_SESSION", ss);
if (i > 0)
return;
#endif
OPENSSL_free(ss->ext.alpn_selected);
OPENSSL_free(ss->ticket_appdata);
- CRYPTO_THREAD_lock_free(ss->lock);
+ CRYPTO_FREE_REF(&ss->references);
OPENSSL_clear_free(ss, sizeof(*ss));
}
{
int i;
- if (CRYPTO_UP_REF(&ss->references, &i, ss->lock) <= 0)
+ if (CRYPTO_UP_REF(&ss->references, &i) <= 0)
return 0;
REF_PRINT_COUNT("SSL_SESSION", ss);