summaryrefslogtreecommitdiffstats
path: root/apps/openssl.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-06-20 10:38:46 +0200
committerRichard Levitte <levitte@openssl.org>2019-06-20 18:19:06 +0200
commitba4341316ce762f917f973bb4ac604062fb11724 (patch)
tree85c07fed6d0a2cb1c89b2088f85c60fe3d5265d4 /apps/openssl.c
parent7a5f5fd32a58e6c70cc0ce05a7d7391e4968663e (diff)
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 <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9196)
Diffstat (limited to 'apps/openssl.c')
-rw-r--r--apps/openssl.c8
1 files changed, 7 insertions, 1 deletions
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 */