X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Ftrace.c;h=ba9b8dd742270b9f9085c1994755448b322a60ad;hp=f4b96866a8be877cfeccc7aa27969110e3cbe210;hb=ba0a6d1deb20d81bbf89b365c5c73879cbe0fae7;hpb=fe26f798526c14a3f8c9bb55d0eaf8eaa0d086e1 diff --git a/crypto/trace.c b/crypto/trace.c index f4b96866a8..ba9b8dd742 100644 --- a/crypto/trace.c +++ b/crypto/trace.c @@ -1,5 +1,5 @@ /* - * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -10,12 +10,13 @@ #include #include +#include "internal/thread_once.h" #include #include #include #include "internal/bio.h" #include "internal/nelem.h" -#include "internal/cryptlib_int.h" +#include "crypto/cryptlib.h" #include "e_os.h" /* strcasecmp for Windows */ @@ -125,15 +126,18 @@ static const struct trace_category_st trace_categories[] = { TRACE_CATEGORY_(TLS), TRACE_CATEGORY_(TLS_CIPHER), TRACE_CATEGORY_(CONF), +#ifndef OPENSSL_NO_ENGINE TRACE_CATEGORY_(ENGINE_TABLE), TRACE_CATEGORY_(ENGINE_REF_COUNT), +#endif TRACE_CATEGORY_(PKCS5V2), TRACE_CATEGORY_(PKCS12_KEYGEN), TRACE_CATEGORY_(PKCS12_DECRYPT), TRACE_CATEGORY_(X509V3_POLICY), TRACE_CATEGORY_(BN_CTX), - TRACE_CATEGORY_(PROV), - TRACE_CATEGORY_(FETCH), + TRACE_CATEGORY_(STORE), + TRACE_CATEGORY_(DECODER), + TRACE_CATEGORY_(ENCODER), }; const char *OSSL_trace_get_category_name(int num) @@ -220,6 +224,13 @@ static int trace_detach_cb(int category, int type, const void *data) return 1; } +static int do_ossl_trace_init(void); +static CRYPTO_ONCE trace_inited = CRYPTO_ONCE_STATIC_INIT; +DEFINE_RUN_ONCE_STATIC(ossl_trace_init) +{ + return do_ossl_trace_init(); +} + static int set_trace_data(int category, int type, BIO **channel, const char **prefix, const char **suffix, int (*attach_cb)(int, int, const void *), @@ -229,8 +240,9 @@ static int set_trace_data(int category, int type, BIO **channel, char *curr_prefix = NULL; char *curr_suffix = NULL; - /* Ensure ossl_trace_init() is called */ - OPENSSL_init_crypto(0, NULL); + /* Ensure do_ossl_trace_init() is called once */ + if (!RUN_ONCE(&trace_inited, ossl_trace_init)) + return 0; curr_channel = trace_channels[category].bio; curr_prefix = trace_channels[category].prefix; @@ -299,19 +311,15 @@ static int set_trace_data(int category, int type, BIO **channel, return 1; } -#endif -int ossl_trace_init(void) +static int do_ossl_trace_init(void) { -#ifndef OPENSSL_NO_TRACE trace_lock = CRYPTO_THREAD_lock_new(); - if (trace_lock == NULL) - return 0; -#endif - - return 1; + return trace_lock != NULL; } +#endif + void ossl_trace_cleanup(void) { #ifndef OPENSSL_NO_TRACE