From b68193edfb3424eb0f993aec6089c9e057aa5d4d Mon Sep 17 00:00:00 2001 From: jsing <> Date: Sat, 20 Jul 2024 04:04:23 +0000 Subject: Remove cipher from SSL_SESSION. For a long time SSL_SESSION has had both a cipher ID and a pointer to an SSL_CIPHER (and not both are guaranteed to be populated). There is also a pointer to an SSL_CIPHER in the SSL_HANDSHAKE that denotes the cipher being used for this connection. Some code has been using the cipher from SSL_SESSION and some code has been using the cipher from SSL_HANDSHAKE. Remove cipher from SSL_SESSION and use the version in SSL_HANDSHAKE everywhere. If resuming from a session then we need to use the SSL_SESSION cipher ID to set the SSL_HANDSHAKE cipher. And we still need to ensure that we update the cipher ID in the SSL_SESSION whenever the SSL_HANDSHAKE cipher changes (this only occurs in a few places). ok tb@ --- src/lib/libssl/ssl_pkt.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/lib/libssl/ssl_pkt.c') diff --git a/src/lib/libssl/ssl_pkt.c b/src/lib/libssl/ssl_pkt.c index 2c33c45386..7d6785a3de 100644 --- a/src/lib/libssl/ssl_pkt.c +++ b/src/lib/libssl/ssl_pkt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssl_pkt.c,v 1.66 2023/07/11 17:02:47 tb Exp $ */ +/* $OpenBSD: ssl_pkt.c,v 1.67 2024/07/20 04:04:23 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -904,7 +904,7 @@ ssl3_read_handshake_unexpected(SSL *s) * It should be impossible to hit this, but keep the safety * harness for now... */ - if (s->session == NULL || s->session->cipher == NULL) + if (s->session == NULL || s->s3->hs.cipher == NULL) return 1; /* @@ -953,7 +953,7 @@ ssl3_read_handshake_unexpected(SSL *s) return -1; } - if (s->session == NULL || s->session->cipher == NULL) { + if (s->session == NULL || s->s3->hs.cipher == NULL) { SSLerror(s, ERR_R_INTERNAL_ERROR); return -1; } @@ -1235,7 +1235,8 @@ ssl3_do_change_cipher_spec(SSL *s) return (0); } - s->session->cipher = s->s3->hs.cipher; + s->session->cipher_id = s->s3->hs.cipher->id; + if (!tls1_setup_key_block(s)) return (0); } -- cgit v1.2.3-55-g6feb