From cfbd76c1a9737617d4cf90d3a1af704241c97d98 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 23 Jun 2020 10:09:20 +0200 Subject: [PATCH 1/1] CORE: Add an internal function to distinguish the global default context Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/12228) --- crypto/context.c | 9 +++++++++ crypto/evp/evp_fetch.c | 19 +++++++++++++------ include/internal/cryptlib.h | 1 + 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/crypto/context.c b/crypto/context.c index 615c55c8c2..de289fcb68 100644 --- a/crypto/context.c +++ b/crypto/context.c @@ -214,6 +214,15 @@ int openssl_ctx_is_default(OPENSSL_CTX *ctx) return 0; } +int openssl_ctx_is_global_default(OPENSSL_CTX *ctx) +{ +#ifndef FIPS_MODULE + if (openssl_ctx_get_concrete(ctx) == &default_context_int) + return 1; +#endif + return 0; +} + static void openssl_ctx_generic_new(void *parent_ign, void *ptr_ign, CRYPTO_EX_DATA *ad, int index, long argl_ign, void *argp) diff --git a/crypto/evp/evp_fetch.c b/crypto/evp/evp_fetch.c index f63e135d3a..5cb59d98fc 100644 --- a/crypto/evp/evp_fetch.c +++ b/crypto/evp/evp_fetch.c @@ -286,6 +286,17 @@ inner_evp_generic_fetch(OPENSSL_CTX *libctx, int operation_id, return method; } +#ifndef FIPS_MODULE +static const char *libctx_descriptor(OPENSSL_CTX *libctx) +{ + if (openssl_ctx_is_global_default(libctx)) + return "Global default library context"; + if (openssl_ctx_is_default(libctx)) + return "Thread-local default library context"; + return "Non-default library context"; +} +#endif + void *evp_generic_fetch(OPENSSL_CTX *libctx, int operation_id, const char *name, const char *properties, void *(*new_method)(int name_id, @@ -306,9 +317,7 @@ void *evp_generic_fetch(OPENSSL_CTX *libctx, int operation_id, #else ERR_raise_data(ERR_LIB_EVP, code, "%s, Algorithm (%s), Properties (%s)", - (openssl_ctx_is_default(libctx) - ? "Default library context" - : "Non-default library context"), + libctx_descriptor(libctx), name = NULL ? "" : name, properties == NULL ? "" : properties); #endif @@ -350,9 +359,7 @@ void *evp_generic_fetch_by_number(OPENSSL_CTX *libctx, int operation_id, ERR_raise_data(ERR_LIB_EVP, code, "%s, Algorithm (%s), Properties (%s)", - (openssl_ctx_is_default(libctx) - ? "Default library context" - : "Non-default library context"), + libctx_descriptor(libctx), name = NULL ? "" : name, properties == NULL ? "" : properties); } diff --git a/include/internal/cryptlib.h b/include/internal/cryptlib.h index 5118bfbe57..fba1d5643f 100644 --- a/include/internal/cryptlib.h +++ b/include/internal/cryptlib.h @@ -168,6 +168,7 @@ typedef struct openssl_ctx_method { OPENSSL_CTX *openssl_ctx_get_concrete(OPENSSL_CTX *ctx); int openssl_ctx_is_default(OPENSSL_CTX *ctx); +int openssl_ctx_is_global_default(OPENSSL_CTX *ctx); /* Functions to retrieve pointers to data by index */ void *openssl_ctx_get_data(OPENSSL_CTX *, int /* index */, -- 2.34.1