Return NULL from ossl_lib_ctx_get_concrete() when it is uninitialized

When default_context_inited is set to false we return NULL instead of
the global default context.

Fixes #25442

Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26319)
This commit is contained in:
Frederik Wedel-Heinen 2025-01-05 20:42:51 +01:00 committed by Tomas Mraz
parent bbd1811663
commit dfce0d7418
2 changed files with 16 additions and 4 deletions

View File

@ -57,17 +57,23 @@ struct ossl_lib_ctx_st {
int ossl_lib_ctx_write_lock(OSSL_LIB_CTX *ctx)
{
return CRYPTO_THREAD_write_lock(ossl_lib_ctx_get_concrete(ctx)->lock);
if ((ctx = ossl_lib_ctx_get_concrete(ctx)) == NULL)
return 0;
return CRYPTO_THREAD_write_lock(ctx->lock);
}
int ossl_lib_ctx_read_lock(OSSL_LIB_CTX *ctx)
{
return CRYPTO_THREAD_read_lock(ossl_lib_ctx_get_concrete(ctx)->lock);
if ((ctx = ossl_lib_ctx_get_concrete(ctx)) == NULL)
return 0;
return CRYPTO_THREAD_read_lock(ctx->lock);
}
int ossl_lib_ctx_unlock(OSSL_LIB_CTX *ctx)
{
return CRYPTO_THREAD_unlock(ossl_lib_ctx_get_concrete(ctx)->lock);
if ((ctx = ossl_lib_ctx_get_concrete(ctx)) == NULL)
return 0;
return CRYPTO_THREAD_unlock(ctx->lock);
}
int ossl_lib_ctx_is_child(OSSL_LIB_CTX *ctx)
@ -421,7 +427,7 @@ static OSSL_LIB_CTX *get_default_context(void)
{
OSSL_LIB_CTX *current_defctx = get_thread_default_context();
if (current_defctx == NULL)
if (current_defctx == NULL && default_context_inited)
current_defctx = &default_context_int;
return current_defctx;
}

View File

@ -818,6 +818,9 @@ EVP_RAND_CTX *RAND_get0_public(OSSL_LIB_CTX *ctx)
return NULL;
ctx = ossl_lib_ctx_get_concrete(ctx);
if (ctx == NULL)
return NULL;
/*
* If the private is also NULL then this is the first time we've
* used this thread.
@ -851,6 +854,9 @@ EVP_RAND_CTX *RAND_get0_private(OSSL_LIB_CTX *ctx)
return NULL;
ctx = ossl_lib_ctx_get_concrete(ctx);
if (ctx == NULL)
return NULL;
/*
* If the public is also NULL then this is the first time we've
* used this thread.