summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Wedel-Heinen <frederik.wedel-heinen@dencrypt.dk>2024-04-09 12:57:12 +0200
committerMatt Caswell <matt@openssl.org>2024-05-10 08:54:30 +0100
commit78bbf9a864d69686b2e0247fa0cd402eb313f8cc (patch)
treedb07434c5b20ffffb9ae76c40ed1730ae906d7ce
parent28d3158e37b54235a6a059efb2396e37962290e5 (diff)
Fix version check to avoid unsupported protocol error in ssl_choose_server_version()
Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/22275)
-rw-r--r--ssl/statem/statem_lib.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/ssl/statem/statem_lib.c b/ssl/statem/statem_lib.c
index 537ff12f03..13b4a98c11 100644
--- a/ssl/statem/statem_lib.c
+++ b/ssl/statem/statem_lib.c
@@ -2155,6 +2155,8 @@ int ssl_choose_server_version(SSL_CONNECTION *s, CLIENTHELLO_MSG *hello,
RAW_EXTENSION *suppversions;
const int version1_3 = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_3_VERSION
: TLS1_3_VERSION;
+ const int version1_2 = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_2_VERSION
+ : TLS1_2_VERSION;
if (client_version <= 0)
return SSL_R_WRONG_SSL_VERSION;
@@ -2242,7 +2244,7 @@ int ssl_choose_server_version(SSL_CONNECTION *s, CLIENTHELLO_MSG *hello,
* This is after a HelloRetryRequest so we better check that we
* negotiated (D)TLSv1.3
*/
- if (best_vers != TLS1_3_VERSION && best_vers != DTLS1_3_VERSION)
+ if (best_vers != version1_3)
return SSL_R_UNSUPPORTED_PROTOCOL;
return 0;
}
@@ -2262,8 +2264,7 @@ int ssl_choose_server_version(SSL_CONNECTION *s, CLIENTHELLO_MSG *hello,
* version we can negotiate is (D)TLSv1.2
*/
if (ssl_version_cmp(s, client_version, version1_3) >= 0)
- client_version = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_2_VERSION
- : TLS1_2_VERSION;
+ client_version = version1_2;
/*
* No supported versions extension, so we just use the version supplied in
@@ -2308,6 +2309,8 @@ int ssl_choose_client_version(SSL_CONNECTION *s, int version,
const version_info *table;
int ret, ver_min, ver_max, real_max, origv;
SSL *ssl = SSL_CONNECTION_GET_SSL(s);
+ const int version1_3 = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_3_VERSION
+ : TLS1_3_VERSION;
origv = s->version;
s->version = version;
@@ -2321,8 +2324,7 @@ int ssl_choose_client_version(SSL_CONNECTION *s, int version,
return 0;
}
- if (s->hello_retry_request != SSL_HRR_NONE
- && (s->version != TLS1_3_VERSION && s->version != DTLS1_3_VERSION)) {
+ if (s->hello_retry_request != SSL_HRR_NONE && s->version != version1_3) {
s->version = origv;
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_R_WRONG_SSL_VERSION);
return 0;