diff options
Diffstat (limited to 'ssl/statem/extensions.c')
-rw-r--r-- | ssl/statem/extensions.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/ssl/statem/extensions.c b/ssl/statem/extensions.c index e16b75f683..3153d3b376 100644 --- a/ssl/statem/extensions.c +++ b/ssl/statem/extensions.c @@ -832,7 +832,7 @@ static int init_server_name(SSL *s, unsigned int context) static int final_server_name(SSL *s, unsigned int context, int sent, int *al) { - int ret = SSL_TLSEXT_ERR_NOACK; + int ret = SSL_TLSEXT_ERR_NOACK, discard; int altmp = SSL_AD_UNRECOGNIZED_NAME; int was_ticket = (SSL_get_options(s) & SSL_OP_NO_TICKET) == 0; @@ -850,6 +850,19 @@ static int final_server_name(SSL *s, unsigned int context, int sent, } /* + * If we switched contexts (whether here or in the client_hello callback), + * move the sess_accept increment from the session_ctx to the new + * context, to avoid the confusing situation of having sess_accept_good + * exceed sess_accept (zero) for the new context. + */ + if (SSL_IS_FIRST_HANDSHAKE(s) && s->ctx != s->session_ctx) { + CRYPTO_atomic_add(&s->ctx->stats.sess_accept, 1, &discard, + s->ctx->lock); + CRYPTO_atomic_add(&s->session_ctx->stats.sess_accept, -1, &discard, + s->session_ctx->lock); + } + + /* * If we're expecting to send a ticket, and tickets were previously enabled, * and now tickets are disabled, then turn off expected ticket. * Also, if this is not a resumption, create a new session ID |