From ba4341316ce762f917f973bb4ac604062fb11724 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Thu, 20 Jun 2019 10:38:46 +0200 Subject: test/testutil/init.c, apps/openssl.c: add trace cleanup handle earlier It turned out that the internal trace cleanup handler was added too late, so it would be executed before OPENSSL_cleanup(). This results in address errors, as the trace code that's executed in OPENSSL_cleanup() itself tries to reach for data that's been freed at that point. Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/9196) --- apps/openssl.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'apps') diff --git a/apps/openssl.c b/apps/openssl.c index 9c0d933d7b..7a490cc455 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -216,6 +216,13 @@ static void setup_trace(const char *str) { char *val; + /* + * We add this handler as early as possible to ensure it's executed + * as late as possible, i.e. after the TRACE code has done its cleanup + * (which happens last in OPENSSL_cleanup). + */ + atexit(cleanup_trace); + trace_data_stack = sk_tracedata_new_null(); val = OPENSSL_strdup(str); @@ -240,7 +247,6 @@ static void setup_trace(const char *str) } OPENSSL_free(val); - atexit(cleanup_trace); } #endif /* OPENSSL_NO_TRACE */ -- cgit v1.2.3