trace: ensure correct grouping
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Tue, 12 Mar 2019 23:14:55 +0000 (00:14 +0100)
committerDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Fri, 15 Mar 2019 07:48:43 +0000 (08:48 +0100)
commitfe50e115718edb8938443a45c8014d6568537bd0
treea701f87f69ebf9cdc6e15ce45ae6d7f52dfbe371
parent13d06925e8cb15bf4247f14280d535618e7a4b2b
trace: ensure correct grouping

It is important that output to the trace channels occurs only inside
a trace group. This precondtion is satisfied whenever the standard
TRACE macros are used. It can be violated only by a bad programming
mistake, like copying the 'trc_out' pointer and using it outside
the trace group.

This commit enforces correct pairing of the OSSL_TRACE_CTRL_BEGIN and
OSSL_TRACE_CTRL_END callbacks, and checks that OSSL_TRACE_CTRL_WRITE
callbacks only occur within such groups.

While implementing it, it turned out that the group assertion failed

  apps/openssl.c:152: OpenSSL internal error: \
                      Assertion failed: trace_data->ingroup

because the set_trace_data() function invokes some callbacks which
generate trace output, but the correct channel type was set only
after the set_trace_data() call.

To fix the failed assertions, the correct channel type is now set
inside the set_trace_data() call, instead of doing it afterwards.

Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8463)
apps/openssl.c
crypto/trace.c