summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_sess.c
diff options
context:
space:
mode:
authorjsing <>2024-07-20 04:04:23 +0000
committerjsing <>2024-07-20 04:04:23 +0000
commitb68193edfb3424eb0f993aec6089c9e057aa5d4d (patch)
treeb04719de2f91b0f8d7c9c7acb93cef76a89b9948 /src/lib/libssl/ssl_sess.c
parentcc7dc6e9b7012526aa3797842d226b3a275a7e70 (diff)
downloadopenbsd-b68193edfb3424eb0f993aec6089c9e057aa5d4d.tar.gz
openbsd-b68193edfb3424eb0f993aec6089c9e057aa5d4d.tar.bz2
openbsd-b68193edfb3424eb0f993aec6089c9e057aa5d4d.zip
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@
Diffstat (limited to 'src/lib/libssl/ssl_sess.c')
-rw-r--r--src/lib/libssl/ssl_sess.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/src/lib/libssl/ssl_sess.c b/src/lib/libssl/ssl_sess.c
index 76f194ca78..c2bd1bf135 100644
--- a/src/lib/libssl/ssl_sess.c
+++ b/src/lib/libssl/ssl_sess.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_sess.c,v 1.126 2024/07/19 08:54:31 jsing Exp $ */ 1/* $OpenBSD: ssl_sess.c,v 1.127 2024/07/20 04:04:23 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -287,7 +287,6 @@ ssl_session_dup(SSL_SESSION *sess, int include_ticket)
287 copy->time = sess->time; 287 copy->time = sess->time;
288 copy->references = 1; 288 copy->references = 1;
289 289
290 copy->cipher = sess->cipher;
291 copy->cipher_id = sess->cipher_id; 290 copy->cipher_id = sess->cipher_id;
292 291
293 if (sess->tlsext_hostname != NULL) { 292 if (sess->tlsext_hostname != NULL) {
@@ -707,12 +706,6 @@ ssl_get_prev_session(SSL *s, CBS *session_id, CBS *ext_block, int *alert)
707 goto err; 706 goto err;
708 } 707 }
709 708
710 if (sess->cipher == NULL) {
711 sess->cipher = ssl3_get_cipher_by_id(sess->cipher_id);
712 if (sess->cipher == NULL)
713 goto err;
714 }
715
716 if (sess->timeout < (time(NULL) - sess->time)) { 709 if (sess->timeout < (time(NULL) - sess->time)) {
717 s->session_ctx->stats.sess_timeout++; 710 s->session_ctx->stats.sess_timeout++;
718 if (!ticket_decrypted) { 711 if (!ticket_decrypted) {
@@ -991,7 +984,7 @@ LSSL_ALIAS(SSL_SESSION_get_protocol_version);
991const SSL_CIPHER * 984const SSL_CIPHER *
992SSL_SESSION_get0_cipher(const SSL_SESSION *s) 985SSL_SESSION_get0_cipher(const SSL_SESSION *s)
993{ 986{
994 return s->cipher; 987 return ssl3_get_cipher_by_id(s->cipher_id);
995} 988}
996LSSL_ALIAS(SSL_SESSION_get0_cipher); 989LSSL_ALIAS(SSL_SESSION_get0_cipher);
997 990