mirror of
https://github.com/openssl/openssl.git
synced 2025-01-26 20:03:32 +08:00
Make sure we pre-initialise properties
Simplify the initialisation of the core by pre-initialising properties. Reviewed-by: Paul Dale <paul.dale@oracle.com> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9590)
This commit is contained in:
parent
770de3462c
commit
505f466020
@ -9,6 +9,7 @@
|
||||
|
||||
#include "internal/cryptlib_int.h"
|
||||
#include "internal/thread_once.h"
|
||||
#include "internal/property.h"
|
||||
|
||||
struct openssl_ctx_onfree_list_st {
|
||||
openssl_ctx_onfree_fn *fn;
|
||||
@ -47,6 +48,7 @@ static OPENSSL_CTX *default_context = NULL;
|
||||
static int context_init(OPENSSL_CTX *ctx)
|
||||
{
|
||||
size_t i;
|
||||
int exdata_done = 0;
|
||||
|
||||
ctx->lock = CRYPTO_THREAD_lock_new();
|
||||
if (ctx->lock == NULL)
|
||||
@ -63,8 +65,10 @@ static int context_init(OPENSSL_CTX *ctx)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* OPENSSL_CTX is built on top of ex_data so we initialise that directly */
|
||||
if (!do_ex_data_init(ctx))
|
||||
goto err;
|
||||
exdata_done = 1;
|
||||
|
||||
if (!crypto_new_ex_data_ex(ctx, CRYPTO_EX_INDEX_OPENSSL_CTX, NULL,
|
||||
&ctx->data)) {
|
||||
@ -72,8 +76,14 @@ static int context_init(OPENSSL_CTX *ctx)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Everything depends on properties, so we also pre-initialise that */
|
||||
if (!ossl_property_parse_init(ctx))
|
||||
goto err;
|
||||
|
||||
return 1;
|
||||
err:
|
||||
if (exdata_done)
|
||||
crypto_cleanup_all_ex_data_int(ctx);
|
||||
CRYPTO_THREAD_lock_free(ctx->oncelock);
|
||||
CRYPTO_THREAD_lock_free(ctx->lock);
|
||||
ctx->lock = NULL;
|
||||
|
@ -84,12 +84,6 @@ int ossl_property_unlock(OSSL_METHOD_STORE *p)
|
||||
return p != 0 ? CRYPTO_THREAD_unlock(p->lock) : 0;
|
||||
}
|
||||
|
||||
static openssl_ctx_run_once_fn do_method_store_init;
|
||||
int do_method_store_init(OPENSSL_CTX *ctx)
|
||||
{
|
||||
return ossl_property_parse_init(ctx);
|
||||
}
|
||||
|
||||
static unsigned long query_hash(const QUERY *a)
|
||||
{
|
||||
return OPENSSL_LH_strhash(a->query);
|
||||
@ -132,11 +126,6 @@ OSSL_METHOD_STORE *ossl_method_store_new(OPENSSL_CTX *ctx)
|
||||
{
|
||||
OSSL_METHOD_STORE *res;
|
||||
|
||||
if (!openssl_ctx_run_once(ctx,
|
||||
OPENSSL_CTX_METHOD_STORE_RUN_ONCE_INDEX,
|
||||
do_method_store_init))
|
||||
return NULL;
|
||||
|
||||
res = OPENSSL_zalloc(sizeof(*res));
|
||||
if (res != NULL) {
|
||||
res->ctx = ctx;
|
||||
|
@ -21,7 +21,6 @@ OSSL_PROPERTY_IDX ossl_property_value(OPENSSL_CTX *ctx, const char *s,
|
||||
int create);
|
||||
|
||||
/* Property list functions */
|
||||
int ossl_property_parse_init(OPENSSL_CTX *ctx);
|
||||
void ossl_property_free(OSSL_PROPERTY_LIST *p);
|
||||
int ossl_property_has_optional(const OSSL_PROPERTY_LIST *query);
|
||||
int ossl_property_match_count(const OSSL_PROPERTY_LIST *query,
|
||||
|
@ -15,6 +15,9 @@
|
||||
|
||||
typedef struct ossl_method_store_st OSSL_METHOD_STORE;
|
||||
|
||||
/* Initialisation */
|
||||
int ossl_property_parse_init(OPENSSL_CTX *ctx);
|
||||
|
||||
/* Implementation store functions */
|
||||
OSSL_METHOD_STORE *ossl_method_store_new(OPENSSL_CTX *ctx);
|
||||
void ossl_method_store_free(OSSL_METHOD_STORE *store);
|
||||
|
Loading…
Reference in New Issue
Block a user