summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2024-08-02 15:00:01 +0000
committertb <>2024-08-02 15:00:01 +0000
commit69b88701f563e2efc9523720168674a54f6bc069 (patch)
tree61d7fc5b40064d7fad6956a89b7a64bd8e33c1a9 /src
parent569dd285cc3b327709860038464e095a0f007936 (diff)
downloadopenbsd-69b88701f563e2efc9523720168674a54f6bc069.tar.gz
openbsd-69b88701f563e2efc9523720168674a54f6bc069.tar.bz2
openbsd-69b88701f563e2efc9523720168674a54f6bc069.zip
libtls: fix legacy protocol parsing
Redefining TLS_PROTOCOL_TLSv1_0 and TLS_PROTOCOL_TLSv1_1 to be the same as TLS_PROTOCOL_TLSv1_2 had undesired side effects, as witnessed in the accompanying regress tests. The protocol string all:tlsv1.0 would disable TLSv1.2 (so only enable TLSv1.3) and tlsv1.2:!tlsv1.1 would disable all protocols. It makes more sense to ignore any setting of TLSv1.0 and TLSv1.1, so if you request 'tlsv1.1' you get no protocol, but 'all:!tlsv1.1' will enable the two supported protocols TLSv1.3 and TLSv1.2. Restore the defines to their original values and adjust the parsing code to set/unset them. Issue reported by Kenjiro Nakayama Fixes https://github.com/libressl/openbsd/issues/151 with/ok jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libtls/tls.h6
-rw-r--r--src/lib/libtls/tls_config.c6
2 files changed, 6 insertions, 6 deletions
diff --git a/src/lib/libtls/tls.h b/src/lib/libtls/tls.h
index 67804d7cd8..6b36886dc3 100644
--- a/src/lib/libtls/tls.h
+++ b/src/lib/libtls/tls.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls.h,v 1.66 2024/03/27 07:35:30 joshua Exp $ */ 1/* $OpenBSD: tls.h,v 1.67 2024/08/02 15:00:01 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -33,8 +33,8 @@ extern "C" {
33 * Deprecated versions of TLS. Using these effectively selects 33 * Deprecated versions of TLS. Using these effectively selects
34 * the minimum supported version. 34 * the minimum supported version.
35 */ 35 */
36#define TLS_PROTOCOL_TLSv1_0 (1 << 3) 36#define TLS_PROTOCOL_TLSv1_0 (1 << 1)
37#define TLS_PROTOCOL_TLSv1_1 (1 << 3) 37#define TLS_PROTOCOL_TLSv1_1 (1 << 2)
38/* Supported versions of TLS */ 38/* Supported versions of TLS */
39#define TLS_PROTOCOL_TLSv1_2 (1 << 3) 39#define TLS_PROTOCOL_TLSv1_2 (1 << 3)
40#define TLS_PROTOCOL_TLSv1_3 (1 << 4) 40#define TLS_PROTOCOL_TLSv1_3 (1 << 4)
diff --git a/src/lib/libtls/tls_config.c b/src/lib/libtls/tls_config.c
index 10dc5003cb..22fa8455a1 100644
--- a/src/lib/libtls/tls_config.c
+++ b/src/lib/libtls/tls_config.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_config.c,v 1.70 2024/03/28 06:55:02 joshua Exp $ */ 1/* $OpenBSD: tls_config.c,v 1.71 2024/08/02 15:00:01 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -261,9 +261,9 @@ tls_config_parse_protocols(uint32_t *protocols, const char *protostr)
261 if (strcasecmp(p, "tlsv1") == 0) 261 if (strcasecmp(p, "tlsv1") == 0)
262 proto = TLS_PROTOCOL_TLSv1; 262 proto = TLS_PROTOCOL_TLSv1;
263 else if (strcasecmp(p, "tlsv1.0") == 0) 263 else if (strcasecmp(p, "tlsv1.0") == 0)
264 proto = TLS_PROTOCOL_TLSv1_2; 264 proto = TLS_PROTOCOL_TLSv1_0;
265 else if (strcasecmp(p, "tlsv1.1") == 0) 265 else if (strcasecmp(p, "tlsv1.1") == 0)
266 proto = TLS_PROTOCOL_TLSv1_2; 266 proto = TLS_PROTOCOL_TLSv1_1;
267 else if (strcasecmp(p, "tlsv1.2") == 0) 267 else if (strcasecmp(p, "tlsv1.2") == 0)
268 proto = TLS_PROTOCOL_TLSv1_2; 268 proto = TLS_PROTOCOL_TLSv1_2;
269 else if (strcasecmp(p, "tlsv1.3") == 0) 269 else if (strcasecmp(p, "tlsv1.3") == 0)