summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2020-04-17 17:26:00 +0000
committerjsing <>2020-04-17 17:26:00 +0000
commita9bc7234aaecd31be6481a2563a57757f5099da6 (patch)
tree0ef4b41b3b6be88b54b24ea04d0e051f1d5a126e /src/lib
parent7a3cfa245326507331603cc00b8ea8a30966684d (diff)
downloadopenbsd-a9bc7234aaecd31be6481a2563a57757f5099da6.tar.gz
openbsd-a9bc7234aaecd31be6481a2563a57757f5099da6.tar.bz2
openbsd-a9bc7234aaecd31be6481a2563a57757f5099da6.zip
Only include TLSv1.3 cipher suites if there are active cipher suites.
Revise the previous so that we only include TLSv1.3 cipher suites if the cipher rule string resulted in at least one active cipher suite. This more closely matches OpenSSL behaviour. Noted and fix tested by schwarze@ ok beck@ tb@
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libssl/ssl_ciph.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c
index 664ff5456b..08ddc86c3c 100644
--- a/src/lib/libssl/ssl_ciph.c
+++ b/src/lib/libssl/ssl_ciph.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_ciph.c,v 1.113 2020/04/09 17:54:38 jsing Exp $ */ 1/* $OpenBSD: ssl_ciph.c,v 1.114 2020/04/17 17:26:00 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 *
@@ -1171,6 +1171,7 @@ ssl_create_cipher_list(const SSL_METHOD *ssl_method,
1171 CIPHER_ORDER *co_list = NULL, *head = NULL, *tail = NULL, *curr; 1171 CIPHER_ORDER *co_list = NULL, *head = NULL, *tail = NULL, *curr;
1172 const SSL_CIPHER **ca_list = NULL; 1172 const SSL_CIPHER **ca_list = NULL;
1173 int tls13_seen = 0; 1173 int tls13_seen = 0;
1174 int active;
1174 1175
1175 /* 1176 /*
1176 * Return with error if nothing to do. 1177 * Return with error if nothing to do.
@@ -1320,13 +1321,20 @@ ssl_create_cipher_list(const SSL_METHOD *ssl_method,
1320 * If the rule string did not contain any references to TLSv1.3, 1321 * If the rule string did not contain any references to TLSv1.3,
1321 * include inactive TLSv1.3 cipher suites. This avoids attempts to 1322 * include inactive TLSv1.3 cipher suites. This avoids attempts to
1322 * use TLSv1.3 with an older rule string that does not include 1323 * use TLSv1.3 with an older rule string that does not include
1323 * TLSv1.3 cipher suites. 1324 * TLSv1.3 cipher suites. If the rule string resulted in no active
1325 * cipher suites then we return an empty stack.
1324 */ 1326 */
1327 active = 0;
1325 for (curr = head; curr != NULL; curr = curr->next) { 1328 for (curr = head; curr != NULL; curr = curr->next) {
1326 if (curr->active || 1329 if (curr->active ||
1327 (!tls13_seen && curr->cipher->algorithm_ssl == SSL_TLSV1_3)) 1330 (!tls13_seen && curr->cipher->algorithm_ssl == SSL_TLSV1_3))
1328 sk_SSL_CIPHER_push(cipherstack, curr->cipher); 1331 sk_SSL_CIPHER_push(cipherstack, curr->cipher);
1332 if (curr->active)
1333 active++;
1329 } 1334 }
1335 if (active == 0)
1336 sk_SSL_CIPHER_zero(cipherstack);
1337
1330 free(co_list); /* Not needed any longer */ 1338 free(co_list); /* Not needed any longer */
1331 1339
1332 tmp_cipher_list = sk_SSL_CIPHER_dup(cipherstack); 1340 tmp_cipher_list = sk_SSL_CIPHER_dup(cipherstack);