summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2021-02-07 15:04:10 +0000
committerjsing <>2021-02-07 15:04:10 +0000
commit1e3243705c6918de211100bcbd8ef0b8488d215e (patch)
tree39da1e539db935f3cc8ae0aeec4e7f7ceb5cc61e /src
parent5a642e2e581776f13874ce5444f9f27501465e56 (diff)
downloadopenbsd-1e3243705c6918de211100bcbd8ef0b8488d215e.tar.gz
openbsd-1e3243705c6918de211100bcbd8ef0b8488d215e.tar.bz2
openbsd-1e3243705c6918de211100bcbd8ef0b8488d215e.zip
Factor out the legacy stack version checks.
Also check for explicit version numbers, rather than just the major version value. ok tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/ssl_clnt.c18
-rw-r--r--src/lib/libssl/ssl_locl.h3
-rw-r--r--src/lib/libssl/ssl_srvr.c19
-rw-r--r--src/lib/libssl/ssl_versions.c12
4 files changed, 24 insertions, 28 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c
index 4a6e8b06a8..25164ea012 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.76 2020/10/14 16:57:33 jsing Exp $ */ 1/* $OpenBSD: ssl_clnt.c,v 1.77 2021/02/07 15:04:10 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 *
@@ -212,18 +212,10 @@ ssl3_connect(SSL *s)
212 if (cb != NULL) 212 if (cb != NULL)
213 cb(s, SSL_CB_HANDSHAKE_START, 1); 213 cb(s, SSL_CB_HANDSHAKE_START, 1);
214 214
215 if (SSL_is_dtls(s)) { 215 if (!ssl_legacy_stack_version(s, s->version)) {
216 if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00)) { 216 SSLerror(s, ERR_R_INTERNAL_ERROR);
217 SSLerror(s, ERR_R_INTERNAL_ERROR); 217 ret = -1;
218 ret = -1; 218 goto end;
219 goto end;
220 }
221 } else {
222 if ((s->version & 0xff00) != 0x0300) {
223 SSLerror(s, ERR_R_INTERNAL_ERROR);
224 ret = -1;
225 goto end;
226 }
227 } 219 }
228 220
229 /* s->version=SSL3_VERSION; */ 221 /* s->version=SSL3_VERSION; */
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index d5298d7af1..b56a99bb79 100644
--- a/src/lib/libssl/ssl_locl.h
+++ b/src/lib/libssl/ssl_locl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_locl.h,v 1.318 2021/01/28 17:00:39 jsing Exp $ */ 1/* $OpenBSD: ssl_locl.h,v 1.319 2021/02/07 15:04:10 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 *
@@ -1115,6 +1115,7 @@ int ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver,
1115int ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, 1115int ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver,
1116 uint16_t *out_ver); 1116 uint16_t *out_ver);
1117int ssl_downgrade_max_version(SSL *s, uint16_t *max_ver); 1117int ssl_downgrade_max_version(SSL *s, uint16_t *max_ver);
1118int ssl_legacy_stack_version(SSL *s, uint16_t version);
1118int ssl_cipher_in_list(STACK_OF(SSL_CIPHER) *ciphers, const SSL_CIPHER *cipher); 1119int ssl_cipher_in_list(STACK_OF(SSL_CIPHER) *ciphers, const SSL_CIPHER *cipher);
1119int ssl_cipher_allowed_in_version_range(const SSL_CIPHER *cipher, 1120int ssl_cipher_allowed_in_version_range(const SSL_CIPHER *cipher,
1120 uint16_t min_ver, uint16_t max_ver); 1121 uint16_t min_ver, uint16_t max_ver);
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 3551ee41ee..15768bb565 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.90 2021/01/26 14:22:20 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.91 2021/02/07 15:04:10 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 *
@@ -213,19 +213,12 @@ ssl3_accept(SSL *s)
213 if (cb != NULL) 213 if (cb != NULL)
214 cb(s, SSL_CB_HANDSHAKE_START, 1); 214 cb(s, SSL_CB_HANDSHAKE_START, 1);
215 215
216 if (SSL_is_dtls(s)) { 216 if (!ssl_legacy_stack_version(s, s->version)) {
217 if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00)) { 217 SSLerror(s, ERR_R_INTERNAL_ERROR);
218 SSLerror(s, ERR_R_INTERNAL_ERROR); 218 ret = -1;
219 ret = -1; 219 goto end;
220 goto end;
221 }
222 } else {
223 if ((s->version >> 8) != 3) {
224 SSLerror(s, ERR_R_INTERNAL_ERROR);
225 ret = -1;
226 goto end;
227 }
228 } 220 }
221
229 s->internal->type = SSL_ST_ACCEPT; 222 s->internal->type = SSL_ST_ACCEPT;
230 223
231 if (!ssl3_setup_init_buffer(s)) { 224 if (!ssl3_setup_init_buffer(s)) {
diff --git a/src/lib/libssl/ssl_versions.c b/src/lib/libssl/ssl_versions.c
index c5de9d0cde..83d0d06af5 100644
--- a/src/lib/libssl/ssl_versions.c
+++ b/src/lib/libssl/ssl_versions.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_versions.c,v 1.8 2021/01/04 19:19:12 tb Exp $ */ 1/* $OpenBSD: ssl_versions.c,v 1.9 2021/02/07 15:04:10 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -231,3 +231,13 @@ ssl_downgrade_max_version(SSL *s, uint16_t *max_ver)
231 231
232 return 1; 232 return 1;
233} 233}
234
235int
236ssl_legacy_stack_version(SSL *s, uint16_t version)
237{
238 if (SSL_is_dtls(s))
239 return version == DTLS1_VERSION;
240
241 return version == TLS1_VERSION || version == TLS1_1_VERSION ||
242 version == TLS1_2_VERSION;
243}