diff options
Diffstat (limited to 'src/lib/libssl/ssl_srvr.c')
| -rw-r--r-- | src/lib/libssl/ssl_srvr.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c index be9c27f73f..373a20d61b 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.95 2021/02/20 14:16:56 tb Exp $ */ | 1 | /* $OpenBSD: ssl_srvr.c,v 1.96 2021/03/10 18:27:02 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 | * |
| @@ -219,6 +219,14 @@ ssl3_accept(SSL *s) | |||
| 219 | goto end; | 219 | goto end; |
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | if (!ssl_supported_tls_version_range(s, | ||
| 223 | &S3I(s)->hs.our_min_tls_version, | ||
| 224 | &S3I(s)->hs.our_max_tls_version)) { | ||
| 225 | SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); | ||
| 226 | ret = -1; | ||
| 227 | goto end; | ||
| 228 | } | ||
| 229 | |||
| 222 | s->internal->type = SSL_ST_ACCEPT; | 230 | s->internal->type = SSL_ST_ACCEPT; |
| 223 | 231 | ||
| 224 | if (!ssl3_setup_init_buffer(s)) { | 232 | if (!ssl3_setup_init_buffer(s)) { |
| @@ -844,7 +852,7 @@ ssl3_get_client_hello(SSL *s) | |||
| 844 | */ | 852 | */ |
| 845 | if (!ssl_downgrade_max_version(s, &max_version)) | 853 | if (!ssl_downgrade_max_version(s, &max_version)) |
| 846 | goto err; | 854 | goto err; |
| 847 | if (ssl_max_shared_version(s, client_version, &shared_version) != 1) { | 855 | if (!ssl_max_shared_version(s, client_version, &shared_version)) { |
| 848 | if ((s->client_version >> 8) == SSL3_VERSION_MAJOR && | 856 | if ((s->client_version >> 8) == SSL3_VERSION_MAJOR && |
| 849 | !tls12_record_layer_write_protected(s->internal->rl)) { | 857 | !tls12_record_layer_write_protected(s->internal->rl)) { |
| 850 | /* | 858 | /* |
| @@ -860,6 +868,12 @@ ssl3_get_client_hello(SSL *s) | |||
| 860 | s->client_version = client_version; | 868 | s->client_version = client_version; |
| 861 | s->version = shared_version; | 869 | s->version = shared_version; |
| 862 | 870 | ||
| 871 | S3I(s)->hs.negotiated_tls_version = ssl_tls_version(shared_version); | ||
| 872 | if (S3I(s)->hs.negotiated_tls_version == 0) { | ||
| 873 | SSLerror(s, ERR_R_INTERNAL_ERROR); | ||
| 874 | goto err; | ||
| 875 | } | ||
| 876 | |||
| 863 | if ((method = ssl_get_method(shared_version)) == NULL) { | 877 | if ((method = ssl_get_method(shared_version)) == NULL) { |
| 864 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 878 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
| 865 | goto err; | 879 | goto err; |
| @@ -1718,6 +1732,8 @@ ssl3_get_client_kex_rsa(SSL *s, CBS *cbs) | |||
| 1718 | int al = -1; | 1732 | int al = -1; |
| 1719 | 1733 | ||
| 1720 | arc4random_buf(fakekey, sizeof(fakekey)); | 1734 | arc4random_buf(fakekey, sizeof(fakekey)); |
| 1735 | |||
| 1736 | /* XXX - peer max protocol version. */ | ||
| 1721 | fakekey[0] = s->client_version >> 8; | 1737 | fakekey[0] = s->client_version >> 8; |
| 1722 | fakekey[1] = s->client_version & 0xff; | 1738 | fakekey[1] = s->client_version & 0xff; |
| 1723 | 1739 | ||
| @@ -1754,6 +1770,7 @@ ssl3_get_client_kex_rsa(SSL *s, CBS *cbs) | |||
| 1754 | /* SSLerror(s, SSL_R_BAD_RSA_DECRYPT); */ | 1770 | /* SSLerror(s, SSL_R_BAD_RSA_DECRYPT); */ |
| 1755 | } | 1771 | } |
| 1756 | 1772 | ||
| 1773 | /* XXX - peer max version. */ | ||
| 1757 | if ((al == -1) && !((pms[0] == (s->client_version >> 8)) && | 1774 | if ((al == -1) && !((pms[0] == (s->client_version >> 8)) && |
| 1758 | (pms[1] == (s->client_version & 0xff)))) { | 1775 | (pms[1] == (s->client_version & 0xff)))) { |
| 1759 | /* | 1776 | /* |
