summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_versions.c
diff options
context:
space:
mode:
authorjsing <>2021-02-20 09:43:29 +0000
committerjsing <>2021-02-20 09:43:29 +0000
commitbd364ca9f4fae8a2b7897e24cf7658d9c8d965d3 (patch)
treeb003a2f9929caeeede1312592aff61b58a88eb00 /src/lib/libssl/ssl_versions.c
parent141f3ab66d9950038d21604bc59e4b0055b7983b (diff)
downloadopenbsd-bd364ca9f4fae8a2b7897e24cf7658d9c8d965d3.tar.gz
openbsd-bd364ca9f4fae8a2b7897e24cf7658d9c8d965d3.tar.bz2
openbsd-bd364ca9f4fae8a2b7897e24cf7658d9c8d965d3.zip
Return a min/max version of zero if set to zero.
OpenSSL's SSL{_CTX,}_get_{min,max}_proto_version() return a version of zero if the minimum or maximum has been set to zero (which means the minimum or maximum version supported by the method). Previously we returned the minimum or maximum version supported by the method, instead of zero. Match OpenSSL's behaviour by using shadow variables. Discussed with tb@
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/ssl_versions.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib/libssl/ssl_versions.c b/src/lib/libssl/ssl_versions.c
index 2245ae15b5..1ee5ed312c 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.10 2021/02/20 08:30:52 jsing Exp $ */ 1/* $OpenBSD: ssl_versions.c,v 1.11 2021/02/20 09:43:29 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 *
@@ -36,12 +36,13 @@ ssl_clamp_version_range(uint16_t *min_ver, uint16_t *max_ver,
36 36
37int 37int
38ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, 38ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver,
39 uint16_t *out_ver) 39 uint16_t *out_ver, uint16_t *out_proto_ver)
40{ 40{
41 uint16_t min_version, max_version; 41 uint16_t min_version, max_version;
42 42
43 if (ver == 0) { 43 if (ver == 0) {
44 *out_ver = meth->internal->min_version; 44 *out_ver = meth->internal->min_version;
45 *out_proto_ver = 0;
45 return 1; 46 return 1;
46 } 47 }
47 48
@@ -52,19 +53,20 @@ ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver,
52 meth->internal->min_version, meth->internal->max_version)) 53 meth->internal->min_version, meth->internal->max_version))
53 return 0; 54 return 0;
54 55
55 *out_ver = min_version; 56 *out_ver = *out_proto_ver = min_version;
56 57
57 return 1; 58 return 1;
58} 59}
59 60
60int 61int
61ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, 62ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver,
62 uint16_t *out_ver) 63 uint16_t *out_ver, uint16_t *out_proto_ver)
63{ 64{
64 uint16_t min_version, max_version; 65 uint16_t min_version, max_version;
65 66
66 if (ver == 0) { 67 if (ver == 0) {
67 *out_ver = meth->internal->max_version; 68 *out_ver = meth->internal->max_version;
69 *out_proto_ver = 0;
68 return 1; 70 return 1;
69 } 71 }
70 72
@@ -75,7 +77,7 @@ ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver,
75 meth->internal->min_version, meth->internal->max_version)) 77 meth->internal->min_version, meth->internal->max_version))
76 return 0; 78 return 0;
77 79
78 *out_ver = max_version; 80 *out_ver = *out_proto_ver = max_version;
79 81
80 return 1; 82 return 1;
81} 83}