diff options
author | Richard Levitte <levitte@openssl.org> | 2019-06-20 10:38:46 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2019-06-20 18:19:06 +0200 |
commit | ba4341316ce762f917f973bb4ac604062fb11724 (patch) | |
tree | 85c07fed6d0a2cb1c89b2088f85c60fe3d5265d4 /apps | |
parent | Update test/README (diff) | |
download | openssl-ba4341316ce762f917f973bb4ac604062fb11724.tar.xz openssl-ba4341316ce762f917f973bb4ac604062fb11724.zip |
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')
-rw-r--r-- | apps/openssl.c | 8 |
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 */ |