diff options
author | Frederik Wedel-Heinen <frederik.wedel-heinen@dencrypt.dk> | 2024-04-09 12:57:12 +0200 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2024-05-10 08:54:30 +0100 |
commit | 78bbf9a864d69686b2e0247fa0cd402eb313f8cc (patch) | |
tree | db07434c5b20ffffb9ae76c40ed1730ae906d7ce | |
parent | 28d3158e37b54235a6a059efb2396e37962290e5 (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.c | 12 |
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; |