From: Matt Caswell Date: Wed, 4 Apr 2018 13:28:23 +0000 (+0100) Subject: Make sure info callback knows about all handshake start events X-Git-Tag: OpenSSL_1_1_1-pre6~107 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7f9f5f71e48b12b6029871cbf8542f21c7883c6c;p=oweals%2Fopenssl.git Make sure info callback knows about all handshake start events The first session ticket sent by the server is actually tacked onto the end of the first handshake from a state machine perspective. However in reality this is a post-handshake message, and should be preceeded by a handshake start event from an info callback perspective. Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/5874) --- diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c index 60e0bc7373..7e033ceb16 100644 --- a/ssl/statem/statem_srvr.c +++ b/ssl/statem/statem_srvr.c @@ -3716,6 +3716,23 @@ int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt) } age_add_u; if (SSL_IS_TLS13(s)) { + if (s->post_handshake_auth != SSL_PHA_EXT_RECEIVED) { + void (*cb) (const SSL *ssl, int type, int val) = NULL; + + /* + * This is the first session ticket we've sent. In the state + * machine we "cheated" and tacked this onto the end of the first + * handshake. From an info callback perspective this should appear + * like the start of a new handshake. + */ + if (s->info_callback != NULL) + cb = s->info_callback; + else if (s->ctx->info_callback != NULL) + cb = s->ctx->info_callback; + if (cb != NULL) + cb(s, SSL_CB_HANDSHAKE_START, 1); + } + if (!ssl_generate_session_id(s, s->session)) { /* SSLfatal() already called */ goto err;