summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_srvr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_srvr.c')
-rw-r--r--src/lib/libssl/ssl_srvr.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 1aa0324b15..ec1e69a8bb 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.121 2021/10/23 13:36:03 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.122 2021/10/23 14:40:54 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 *
@@ -837,19 +837,19 @@ ssl3_get_client_hello(SSL *s)
837 * (may differ: see RFC 2246, Appendix E, second paragraph) 837 * (may differ: see RFC 2246, Appendix E, second paragraph)
838 */ 838 */
839 if (!ssl_max_shared_version(s, client_version, &shared_version)) { 839 if (!ssl_max_shared_version(s, client_version, &shared_version)) {
840 if ((s->client_version >> 8) == SSL3_VERSION_MAJOR && 840 if ((client_version >> 8) == SSL3_VERSION_MAJOR &&
841 !tls12_record_layer_write_protected(s->internal->rl)) { 841 !tls12_record_layer_write_protected(s->internal->rl)) {
842 /* 842 /*
843 * Similar to ssl3_get_record, send alert using remote 843 * Similar to ssl3_get_record, send alert using remote
844 * version number. 844 * version number.
845 */ 845 */
846 s->version = s->client_version; 846 s->version = client_version;
847 } 847 }
848 SSLerror(s, SSL_R_WRONG_VERSION_NUMBER); 848 SSLerror(s, SSL_R_WRONG_VERSION_NUMBER);
849 al = SSL_AD_PROTOCOL_VERSION; 849 al = SSL_AD_PROTOCOL_VERSION;
850 goto fatal_err; 850 goto fatal_err;
851 } 851 }
852 s->client_version = client_version; 852 S3I(s)->hs.peer_legacy_version = client_version;
853 s->version = shared_version; 853 s->version = shared_version;
854 854
855 S3I(s)->hs.negotiated_tls_version = ssl_tls_version(shared_version); 855 S3I(s)->hs.negotiated_tls_version = ssl_tls_version(shared_version);
@@ -1723,9 +1723,8 @@ ssl3_get_client_kex_rsa(SSL *s, CBS *cbs)
1723 1723
1724 arc4random_buf(fakekey, sizeof(fakekey)); 1724 arc4random_buf(fakekey, sizeof(fakekey));
1725 1725
1726 /* XXX - peer max protocol version. */ 1726 fakekey[0] = S3I(s)->hs.peer_legacy_version >> 8;
1727 fakekey[0] = s->client_version >> 8; 1727 fakekey[1] = S3I(s)->hs.peer_legacy_version & 0xff;
1728 fakekey[1] = s->client_version & 0xff;
1729 1728
1730 pkey = s->cert->pkeys[SSL_PKEY_RSA].privatekey; 1729 pkey = s->cert->pkeys[SSL_PKEY_RSA].privatekey;
1731 if ((pkey == NULL) || (pkey->type != EVP_PKEY_RSA) || 1730 if ((pkey == NULL) || (pkey->type != EVP_PKEY_RSA) ||
@@ -1760,9 +1759,8 @@ ssl3_get_client_kex_rsa(SSL *s, CBS *cbs)
1760 /* SSLerror(s, SSL_R_BAD_RSA_DECRYPT); */ 1759 /* SSLerror(s, SSL_R_BAD_RSA_DECRYPT); */
1761 } 1760 }
1762 1761
1763 /* XXX - peer max version. */ 1762 if ((al == -1) && !((pms[0] == (S3I(s)->hs.peer_legacy_version >> 8)) &&
1764 if ((al == -1) && !((pms[0] == (s->client_version >> 8)) && 1763 (pms[1] == (S3I(s)->hs.peer_legacy_version & 0xff)))) {
1765 (pms[1] == (s->client_version & 0xff)))) {
1766 /* 1764 /*
1767 * The premaster secret must contain the same version number 1765 * The premaster secret must contain the same version number
1768 * as the ClientHello to detect version rollback attacks 1766 * as the ClientHello to detect version rollback attacks