diff options
author | deraadt <> | 2017-05-02 03:59:45 +0000 |
---|---|---|
committer | deraadt <> | 2017-05-02 03:59:45 +0000 |
commit | 2b561cb0e87f2ee535e8c64907883cd275ad3fec (patch) | |
tree | bb9d050c5c2984047e6475e087694d6764f24157 /src/lib/libcrypto/asn1/a_object.c | |
parent | 024e2580a5280d4df3724dab76ce52e14fe2060c (diff) | |
download | openbsd-2b561cb0e87f2ee535e8c64907883cd275ad3fec.tar.gz openbsd-2b561cb0e87f2ee535e8c64907883cd275ad3fec.tar.bz2 openbsd-2b561cb0e87f2ee535e8c64907883cd275ad3fec.zip |
use freezero() instead of memset/explicit_bzero + free. Substantially
reduces conditional logic (-218, +82).
MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH cache alignment calculation bn/bn_exp.c
wasn'tt quite right. Two other tricky bits with ASN1_STRING_FLAG_NDEF and
BN_FLG_STATIC_DATA where the condition cannot be collapsed completely.
Passes regress. ok beck
Diffstat (limited to 'src/lib/libcrypto/asn1/a_object.c')
-rw-r--r-- | src/lib/libcrypto/asn1/a_object.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/src/lib/libcrypto/asn1/a_object.c b/src/lib/libcrypto/asn1/a_object.c index 711b01f149..e10af97d36 100644 --- a/src/lib/libcrypto/asn1/a_object.c +++ b/src/lib/libcrypto/asn1/a_object.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: a_object.c,v 1.29 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: a_object.c,v 1.30 2017/05/02 03:59:44 deraadt 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 | * |
@@ -231,8 +231,7 @@ i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a) | |||
231 | return -1; | 231 | return -1; |
232 | i = i2t_ASN1_OBJECT(tmp, tlen, a); | 232 | i = i2t_ASN1_OBJECT(tmp, tlen, a); |
233 | if (i > (int)(tlen - 1)) { | 233 | if (i > (int)(tlen - 1)) { |
234 | explicit_bzero(tmp, tlen); | 234 | freezero(tmp, tlen); |
235 | free(tmp); | ||
236 | if ((tmp = malloc(i + 1)) == NULL) | 235 | if ((tmp = malloc(i + 1)) == NULL) |
237 | return -1; | 236 | return -1; |
238 | tlen = i + 1; | 237 | tlen = i + 1; |
@@ -242,8 +241,7 @@ i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a) | |||
242 | i = BIO_write(bp, "<INVALID>", 9); | 241 | i = BIO_write(bp, "<INVALID>", 9); |
243 | else | 242 | else |
244 | i = BIO_write(bp, tmp, i); | 243 | i = BIO_write(bp, tmp, i); |
245 | explicit_bzero(tmp, tlen); | 244 | freezero(tmp, tlen); |
246 | free(tmp); | ||
247 | return (i); | 245 | return (i); |
248 | } | 246 | } |
249 | 247 | ||
@@ -319,9 +317,7 @@ c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long len) | |||
319 | 317 | ||
320 | /* detach data from object */ | 318 | /* detach data from object */ |
321 | data = (unsigned char *)ret->data; | 319 | data = (unsigned char *)ret->data; |
322 | if (data != NULL) | 320 | freezero(data, ret->length); |
323 | explicit_bzero(data, ret->length); | ||
324 | free(data); | ||
325 | 321 | ||
326 | data = malloc(length); | 322 | data = malloc(length); |
327 | if (data == NULL) { | 323 | if (data == NULL) { |
@@ -380,9 +376,7 @@ ASN1_OBJECT_free(ASN1_OBJECT *a) | |||
380 | a->sn = a->ln = NULL; | 376 | a->sn = a->ln = NULL; |
381 | } | 377 | } |
382 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) { | 378 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) { |
383 | if (a->data != NULL) | 379 | freezero((void *)a->data, a->length); |
384 | explicit_bzero((void *)a->data, a->length); | ||
385 | free((void *)a->data); | ||
386 | a->data = NULL; | 380 | a->data = NULL; |
387 | a->length = 0; | 381 | a->length = 0; |
388 | } | 382 | } |