summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authortb <>2020-12-16 18:35:59 +0000
committertb <>2020-12-16 18:35:59 +0000
commit7acd284c4d78238b8bbf000888d4202db260a247 (patch)
treec14be4d2e2975a01d1db395a96d115e44073875b /src/lib
parentd3ac08178a3af38a0a297989a450a0563d1bf210 (diff)
downloadopenbsd-7acd284c4d78238b8bbf000888d4202db260a247.tar.gz
openbsd-7acd284c4d78238b8bbf000888d4202db260a247.tar.bz2
openbsd-7acd284c4d78238b8bbf000888d4202db260a247.zip
Avoid potential use of uninitialized in ASN1_time_parse
When parsing an UTCTime into a struct tm that wasn't cleared by the caller, the years would be added to the already present value, which could give an incorrect result. This is an issue in ASN1_UTCTIME_cmp_time_t(), which is practically unused. Fix this by always zeroing the passed struct tm. Issue reported by Olivier Taïbi, thanks! ok jsing
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/asn1/a_time_tm.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/lib/libcrypto/asn1/a_time_tm.c b/src/lib/libcrypto/asn1/a_time_tm.c
index b6e22cbd27..33959afe63 100644
--- a/src/lib/libcrypto/asn1/a_time_tm.c
+++ b/src/lib/libcrypto/asn1/a_time_tm.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: a_time_tm.c,v 1.15 2018/04/25 11:48:21 tb Exp $ */ 1/* $OpenBSD: a_time_tm.c,v 1.16 2020/12/16 18:35:59 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2015 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2015 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -163,10 +163,9 @@ ASN1_time_parse(const char *bytes, size_t len, struct tm *tm, int mode)
163 return (-1); 163 return (-1);
164 164
165 lt = tm; 165 lt = tm;
166 if (lt == NULL) { 166 if (lt == NULL)
167 memset(&ltm, 0, sizeof(ltm));
168 lt = &ltm; 167 lt = &ltm;
169 } 168 memset(lt, 0, sizeof(*lt));
170 169
171 /* Timezone is required and must be GMT (Zulu). */ 170 /* Timezone is required and must be GMT (Zulu). */
172 if (bytes[len - 1] != 'Z') 171 if (bytes[len - 1] != 'Z')