summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_srvr.c
diff options
context:
space:
mode:
authorjsing <>2020-05-31 16:36:35 +0000
committerjsing <>2020-05-31 16:36:35 +0000
commita49dcaedc471e79508b3e5674c538ca90f5c4e2e (patch)
tree1ce257d0fa239a96e7594d053190347cb2b42c4a /src/lib/libssl/ssl_srvr.c
parentf05dbe69dd53b7d5eabcdb912115a58a46ab676a (diff)
downloadopenbsd-a49dcaedc471e79508b3e5674c538ca90f5c4e2e.tar.gz
openbsd-a49dcaedc471e79508b3e5674c538ca90f5c4e2e.tar.bz2
openbsd-a49dcaedc471e79508b3e5674c538ca90f5c4e2e.zip
Correct downgrade sentinels when a version pinned method is in use.
Previously only the enabled protocol versions were considered, however we also have to consider the method in use which may be version pinned. Found the hard way by danj@ with haproxy and force-tlsv12. ok beck@ inoguchi@ tb@
Diffstat (limited to 'src/lib/libssl/ssl_srvr.c')
-rw-r--r--src/lib/libssl/ssl_srvr.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 6a90ad17eb..fac24f4d00 100644
--- a/src/lib/libssl/ssl_srvr.c
+++ b/src/lib/libssl/ssl_srvr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_srvr.c,v 1.76 2020/05/19 16:35:20 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.77 2020/05/31 16:36:35 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 *
@@ -852,6 +852,8 @@ ssl3_get_client_hello(SSL *s)
852 * Use version from inside client hello, not from record header. 852 * Use version from inside client hello, not from record header.
853 * (may differ: see RFC 2246, Appendix E, second paragraph) 853 * (may differ: see RFC 2246, Appendix E, second paragraph)
854 */ 854 */
855 if (!ssl_downgrade_max_version(s, &max_version))
856 goto err;
855 if (ssl_max_shared_version(s, client_version, &shared_version) != 1) { 857 if (ssl_max_shared_version(s, client_version, &shared_version) != 1) {
856 SSLerror(s, SSL_R_WRONG_VERSION_NUMBER); 858 SSLerror(s, SSL_R_WRONG_VERSION_NUMBER);
857 if ((s->client_version >> 8) == SSL3_VERSION_MAJOR && 859 if ((s->client_version >> 8) == SSL3_VERSION_MAJOR &&
@@ -1047,8 +1049,6 @@ ssl3_get_client_hello(SSL *s)
1047 */ 1049 */
1048 arc4random_buf(s->s3->server_random, SSL3_RANDOM_SIZE); 1050 arc4random_buf(s->s3->server_random, SSL3_RANDOM_SIZE);
1049 1051
1050 if (!SSL_IS_DTLS(s) && !ssl_enabled_version_range(s, NULL, &max_version))
1051 goto err;
1052 if (!SSL_IS_DTLS(s) && max_version >= TLS1_2_VERSION && 1052 if (!SSL_IS_DTLS(s) && max_version >= TLS1_2_VERSION &&
1053 s->version < max_version) { 1053 s->version < max_version) {
1054 /* 1054 /*