summaryrefslogtreecommitdiffstats
path: root/crypto/trace.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-06-21 11:20:15 +0200
committerRichard Levitte <levitte@openssl.org>2019-06-22 09:02:22 +0200
commitfe26f798526c14a3f8c9bb55d0eaf8eaa0d086e1 (patch)
tree60f87ca7050e1dc46a79657e7fa9276ec09ae1c6 /crypto/trace.c
parentf8922b5107d098c78f846c8c999f96111345de8d (diff)
OSSL_TRACE: ensure it's initialised
When OSSL_TRACE functionality is called before anything else, it finds itself uninitialised, i.e. its global lock hasn't been created yet. Fortunately, we have an internal general setup function for the trace functionality, that makes for a perfect spot to trigger initialisation. Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com> (Merged from https://github.com/openssl/openssl/pull/9212)
Diffstat (limited to 'crypto/trace.c')
-rw-r--r--crypto/trace.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/crypto/trace.c b/crypto/trace.c
index ecfc6d4e31..f4b96866a8 100644
--- a/crypto/trace.c
+++ b/crypto/trace.c
@@ -132,6 +132,8 @@ static const struct trace_category_st trace_categories[] = {
TRACE_CATEGORY_(PKCS12_DECRYPT),
TRACE_CATEGORY_(X509V3_POLICY),
TRACE_CATEGORY_(BN_CTX),
+ TRACE_CATEGORY_(PROV),
+ TRACE_CATEGORY_(FETCH),
};
const char *OSSL_trace_get_category_name(int num)
@@ -223,9 +225,16 @@ static int set_trace_data(int category, int type, BIO **channel,
int (*attach_cb)(int, int, const void *),
int (*detach_cb)(int, int, const void *))
{
- BIO *curr_channel = trace_channels[category].bio;
- char *curr_prefix = trace_channels[category].prefix;
- char *curr_suffix = trace_channels[category].suffix;
+ BIO *curr_channel = NULL;
+ char *curr_prefix = NULL;
+ char *curr_suffix = NULL;
+
+ /* Ensure ossl_trace_init() is called */
+ OPENSSL_init_crypto(0, NULL);
+
+ curr_channel = trace_channels[category].bio;
+ curr_prefix = trace_channels[category].prefix;
+ curr_suffix = trace_channels[category].suffix;
/* Make sure to run the detach callback first on all data */
if (prefix != NULL && curr_prefix != NULL) {