From: Matt Caswell Date: Fri, 22 Jun 2018 13:15:33 +0000 (+0100) Subject: Don't change a session once its in the cache X-Git-Tag: OpenSSL_1_1_1-pre9~238 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=c35e96691ff3415e68531076ff9f011703524c0a Don't change a session once its in the cache Sessions should be immutable once they are in the cache because they could be shared with other threads. If you change them then this can cause corruptions and races Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/6561) --- diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c index c2976b7a32..df3f15a789 100644 --- a/ssl/statem/statem_srvr.c +++ b/ssl/statem/statem_srvr.c @@ -3796,10 +3796,11 @@ int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt) cb(s, SSL_CB_HANDSHAKE_START, 1); } /* - * If we already sent one NewSessionTicket then we need to take a copy - * of it and create a new session from it. + * If we already sent one NewSessionTicket, or we resumed then + * s->session may already be in a cache and so we must not modify it. + * Instead we need to take a copy of it and modify that. */ - if (s->sent_tickets != 0) { + if (s->sent_tickets != 0 || s->hit) { SSL_SESSION *new_sess = ssl_session_dup(s->session, 0); if (new_sess == NULL) {