diff options
Diffstat (limited to 'src/lib/libssl/ssl_clnt.c')
| -rw-r--r-- | src/lib/libssl/ssl_clnt.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index 70bda982c6..97418f1ac7 100644 --- a/src/lib/libssl/ssl_clnt.c +++ b/src/lib/libssl/ssl_clnt.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_clnt.c,v 1.84 2021/02/22 15:59:10 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.85 2021/03/10 18:27:01 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 | * |
| @@ -218,7 +218,14 @@ ssl3_connect(SSL *s) | |||
| 218 | goto end; | 218 | goto end; |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | /* s->version=SSL3_VERSION; */ | 221 | if (!ssl_supported_tls_version_range(s, |
| 222 | &S3I(s)->hs.our_min_tls_version, | ||
| 223 | &S3I(s)->hs.our_max_tls_version)) { | ||
| 224 | SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); | ||
| 225 | ret = -1; | ||
| 226 | goto end; | ||
| 227 | } | ||
| 228 | |||
| 222 | s->internal->type = SSL_ST_CONNECT; | 229 | s->internal->type = SSL_ST_CONNECT; |
| 223 | 230 | ||
| 224 | if (!ssl3_setup_init_buffer(s)) { | 231 | if (!ssl3_setup_init_buffer(s)) { |
| @@ -904,6 +911,12 @@ ssl3_get_server_hello(SSL *s) | |||
| 904 | } | 911 | } |
| 905 | s->version = server_version; | 912 | s->version = server_version; |
| 906 | 913 | ||
| 914 | S3I(s)->hs.negotiated_tls_version = ssl_tls_version(server_version); | ||
| 915 | if (S3I(s)->hs.negotiated_tls_version == 0) { | ||
| 916 | SSLerror(s, ERR_R_INTERNAL_ERROR); | ||
| 917 | goto err; | ||
| 918 | } | ||
| 919 | |||
| 907 | if ((method = ssl_get_method(server_version)) == NULL) { | 920 | if ((method = ssl_get_method(server_version)) == NULL) { |
| 908 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 921 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
| 909 | goto err; | 922 | goto err; |
| @@ -1019,7 +1032,7 @@ ssl3_get_server_hello(SSL *s) | |||
| 1019 | 1032 | ||
| 1020 | /* TLS v1.2 only ciphersuites require v1.2 or later. */ | 1033 | /* TLS v1.2 only ciphersuites require v1.2 or later. */ |
| 1021 | if ((cipher->algorithm_ssl & SSL_TLSV1_2) && | 1034 | if ((cipher->algorithm_ssl & SSL_TLSV1_2) && |
| 1022 | (TLS1_get_version(s) < TLS1_2_VERSION)) { | 1035 | S3I(s)->hs.negotiated_tls_version < TLS1_2_VERSION) { |
| 1023 | al = SSL_AD_ILLEGAL_PARAMETER; | 1036 | al = SSL_AD_ILLEGAL_PARAMETER; |
| 1024 | SSLerror(s, SSL_R_WRONG_CIPHER_RETURNED); | 1037 | SSLerror(s, SSL_R_WRONG_CIPHER_RETURNED); |
| 1025 | goto fatal_err; | 1038 | goto fatal_err; |
| @@ -1982,6 +1995,7 @@ ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, CBB *cbb) | |||
| 1982 | goto err; | 1995 | goto err; |
| 1983 | } | 1996 | } |
| 1984 | 1997 | ||
| 1998 | /* XXX - our max protocol version. */ | ||
| 1985 | pms[0] = s->client_version >> 8; | 1999 | pms[0] = s->client_version >> 8; |
| 1986 | pms[1] = s->client_version & 0xff; | 2000 | pms[1] = s->client_version & 0xff; |
| 1987 | arc4random_buf(&pms[2], sizeof(pms) - 2); | 2001 | arc4random_buf(&pms[2], sizeof(pms) - 2); |
