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 | |
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
38 files changed, 109 insertions, 238 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 | } |
diff --git a/src/lib/libcrypto/asn1/a_sign.c b/src/lib/libcrypto/asn1/a_sign.c index 4e545eb719..df955be745 100644 --- a/src/lib/libcrypto/asn1/a_sign.c +++ b/src/lib/libcrypto/asn1/a_sign.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: a_sign.c,v 1.22 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: a_sign.c,v 1.23 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 | * |
@@ -227,13 +227,7 @@ ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, | |||
227 | 227 | ||
228 | err: | 228 | err: |
229 | EVP_MD_CTX_cleanup(ctx); | 229 | EVP_MD_CTX_cleanup(ctx); |
230 | if (buf_in != NULL) { | 230 | freezero((char *)buf_in, inl); |
231 | explicit_bzero((char *)buf_in, inl); | 231 | freezero((char *)buf_out, outll); |
232 | free(buf_in); | ||
233 | } | ||
234 | if (buf_out != NULL) { | ||
235 | explicit_bzero((char *)buf_out, outll); | ||
236 | free(buf_out); | ||
237 | } | ||
238 | return (outl); | 232 | return (outl); |
239 | } | 233 | } |
diff --git a/src/lib/libcrypto/asn1/a_verify.c b/src/lib/libcrypto/asn1/a_verify.c index 8f8e58c095..6f0cd1080b 100644 --- a/src/lib/libcrypto/asn1/a_verify.c +++ b/src/lib/libcrypto/asn1/a_verify.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: a_verify.c,v 1.23 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: a_verify.c,v 1.24 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 | * |
@@ -148,8 +148,7 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, | |||
148 | goto err; | 148 | goto err; |
149 | } | 149 | } |
150 | 150 | ||
151 | explicit_bzero(buf_in, (unsigned int)inl); | 151 | freezero(buf_in, (unsigned int)inl); |
152 | free(buf_in); | ||
153 | 152 | ||
154 | if (EVP_DigestVerifyFinal(&ctx, signature->data, | 153 | if (EVP_DigestVerifyFinal(&ctx, signature->data, |
155 | (size_t)signature->length) <= 0) { | 154 | (size_t)signature->length) <= 0) { |
diff --git a/src/lib/libcrypto/asn1/asn1_lib.c b/src/lib/libcrypto/asn1/asn1_lib.c index a90873d54a..852644a781 100644 --- a/src/lib/libcrypto/asn1/asn1_lib.c +++ b/src/lib/libcrypto/asn1/asn1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: asn1_lib.c,v 1.38 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: asn1_lib.c,v 1.39 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 | * |
@@ -401,9 +401,7 @@ ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len) | |||
401 | void | 401 | void |
402 | ASN1_STRING_set0(ASN1_STRING *str, void *data, int len) | 402 | ASN1_STRING_set0(ASN1_STRING *str, void *data, int len) |
403 | { | 403 | { |
404 | if (str->data != NULL) | 404 | freezero(str->data, str->length); |
405 | explicit_bzero(str->data, str->length); | ||
406 | free(str->data); | ||
407 | str->data = data; | 405 | str->data = data; |
408 | str->length = len; | 406 | str->length = len; |
409 | } | 407 | } |
@@ -436,10 +434,8 @@ ASN1_STRING_free(ASN1_STRING *a) | |||
436 | { | 434 | { |
437 | if (a == NULL) | 435 | if (a == NULL) |
438 | return; | 436 | return; |
439 | if (a->data != NULL && !(a->flags & ASN1_STRING_FLAG_NDEF)) { | 437 | if (a->data != NULL && !(a->flags & ASN1_STRING_FLAG_NDEF)) |
440 | explicit_bzero(a->data, a->length); | 438 | freezero(a->data, a->length); |
441 | free(a->data); | ||
442 | } | ||
443 | free(a); | 439 | free(a); |
444 | } | 440 | } |
445 | 441 | ||
diff --git a/src/lib/libcrypto/bn/bn_asm.c b/src/lib/libcrypto/bn/bn_asm.c index 49f0ba5d7b..993fbb3dc5 100644 --- a/src/lib/libcrypto/bn/bn_asm.c +++ b/src/lib/libcrypto/bn/bn_asm.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_asm.c,v 1.14 2015/02/25 15:39:49 bcook Exp $ */ | 1 | /* $OpenBSD: bn_asm.c,v 1.15 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 | * |
@@ -989,8 +989,7 @@ enter: | |||
989 | } | 989 | } |
990 | memcpy(rp, tp, num * sizeof(BN_ULONG)); | 990 | memcpy(rp, tp, num * sizeof(BN_ULONG)); |
991 | out: | 991 | out: |
992 | explicit_bzero(tp, (num + 2) * sizeof(BN_ULONG)); | 992 | freezero(tp, (num + 2) * sizeof(BN_ULONG)); |
993 | free(tp); | ||
994 | return 1; | 993 | return 1; |
995 | } | 994 | } |
996 | #else | 995 | #else |
@@ -1081,8 +1080,7 @@ bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, | |||
1081 | } | 1080 | } |
1082 | memcpy(rp, tp, num * sizeof(BN_ULONG)); | 1081 | memcpy(rp, tp, num * sizeof(BN_ULONG)); |
1083 | out: | 1082 | out: |
1084 | explicit_bzero(tp, (num + 2) * sizeof(BN_ULONG)); | 1083 | freezero(tp, (num + 2) * sizeof(BN_ULONG)); |
1085 | free(tp); | ||
1086 | return 1; | 1084 | return 1; |
1087 | } | 1085 | } |
1088 | #else | 1086 | #else |
diff --git a/src/lib/libcrypto/bn/bn_exp.c b/src/lib/libcrypto/bn/bn_exp.c index d388758927..b778d5d67c 100644 --- a/src/lib/libcrypto/bn/bn_exp.c +++ b/src/lib/libcrypto/bn/bn_exp.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_exp.c,v 1.30 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: bn_exp.c,v 1.31 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 | * |
@@ -706,12 +706,10 @@ BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, | |||
706 | numPowers = 1 << window; | 706 | numPowers = 1 << window; |
707 | powerbufLen = sizeof(m->d[0]) * (top * numPowers + | 707 | powerbufLen = sizeof(m->d[0]) * (top * numPowers + |
708 | ((2*top) > numPowers ? (2*top) : numPowers)); | 708 | ((2*top) > numPowers ? (2*top) : numPowers)); |
709 | if ((powerbufFree = malloc(powerbufLen + | 709 | if ((powerbufFree = calloc(powerbufLen + |
710 | MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH)) == NULL) | 710 | MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH, 1)) == NULL) |
711 | goto err; | 711 | goto err; |
712 | |||
713 | powerbuf = MOD_EXP_CTIME_ALIGN(powerbufFree); | 712 | powerbuf = MOD_EXP_CTIME_ALIGN(powerbufFree); |
714 | memset(powerbuf, 0, powerbufLen); | ||
715 | 713 | ||
716 | /* lay down tmp and am right after powers table */ | 714 | /* lay down tmp and am right after powers table */ |
717 | tmp.d = (BN_ULONG *)(powerbuf + sizeof(m->d[0]) * top * numPowers); | 715 | tmp.d = (BN_ULONG *)(powerbuf + sizeof(m->d[0]) * top * numPowers); |
@@ -901,10 +899,7 @@ BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, | |||
901 | err: | 899 | err: |
902 | if ((in_mont == NULL) && (mont != NULL)) | 900 | if ((in_mont == NULL) && (mont != NULL)) |
903 | BN_MONT_CTX_free(mont); | 901 | BN_MONT_CTX_free(mont); |
904 | if (powerbuf != NULL) { | 902 | freezero(powerbufFree, powerbufLen + MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH); |
905 | explicit_bzero(powerbuf, powerbufLen); | ||
906 | free(powerbufFree); | ||
907 | } | ||
908 | BN_CTX_end(ctx); | 903 | BN_CTX_end(ctx); |
909 | return (ret); | 904 | return (ret); |
910 | } | 905 | } |
diff --git a/src/lib/libcrypto/bn/bn_lib.c b/src/lib/libcrypto/bn/bn_lib.c index f2736e31c3..8aeeb5304f 100644 --- a/src/lib/libcrypto/bn/bn_lib.c +++ b/src/lib/libcrypto/bn/bn_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_lib.c,v 1.37 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: bn_lib.c,v 1.38 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 | * |
@@ -220,10 +220,8 @@ BN_clear_free(BIGNUM *a) | |||
220 | if (a == NULL) | 220 | if (a == NULL) |
221 | return; | 221 | return; |
222 | bn_check_top(a); | 222 | bn_check_top(a); |
223 | if (a->d != NULL && !(BN_get_flags(a, BN_FLG_STATIC_DATA))) { | 223 | if (a->d != NULL && !(BN_get_flags(a, BN_FLG_STATIC_DATA))) |
224 | explicit_bzero(a->d, a->dmax * sizeof(a->d[0])); | 224 | freezero(a->d, a->dmax * sizeof(a->d[0])); |
225 | free(a->d); | ||
226 | } | ||
227 | i = BN_get_flags(a, BN_FLG_MALLOCED); | 225 | i = BN_get_flags(a, BN_FLG_MALLOCED); |
228 | explicit_bzero(a, sizeof(BIGNUM)); | 226 | explicit_bzero(a, sizeof(BIGNUM)); |
229 | if (i) | 227 | if (i) |
@@ -393,10 +391,8 @@ bn_expand2(BIGNUM *b, int words) | |||
393 | BN_ULONG *a = bn_expand_internal(b, words); | 391 | BN_ULONG *a = bn_expand_internal(b, words); |
394 | if (!a) | 392 | if (!a) |
395 | return NULL; | 393 | return NULL; |
396 | if (b->d) { | 394 | if (b->d) |
397 | explicit_bzero(b->d, b->dmax * sizeof(b->d[0])); | 395 | freezero(b->d, b->dmax * sizeof(b->d[0])); |
398 | free(b->d); | ||
399 | } | ||
400 | b->d = a; | 396 | b->d = a; |
401 | b->dmax = words; | 397 | b->dmax = words; |
402 | } | 398 | } |
diff --git a/src/lib/libcrypto/bn/bn_rand.c b/src/lib/libcrypto/bn/bn_rand.c index 812fa6a575..8625757140 100644 --- a/src/lib/libcrypto/bn/bn_rand.c +++ b/src/lib/libcrypto/bn/bn_rand.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_rand.c,v 1.19 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: bn_rand.c,v 1.20 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 | * |
@@ -186,10 +186,7 @@ bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) | |||
186 | ret = 1; | 186 | ret = 1; |
187 | 187 | ||
188 | err: | 188 | err: |
189 | if (buf != NULL) { | 189 | freezero(buf, bytes); |
190 | explicit_bzero(buf, bytes); | ||
191 | free(buf); | ||
192 | } | ||
193 | bn_check_top(rnd); | 190 | bn_check_top(rnd); |
194 | return (ret); | 191 | return (ret); |
195 | } | 192 | } |
diff --git a/src/lib/libcrypto/buffer/buffer.c b/src/lib/libcrypto/buffer/buffer.c index 5ed893f5f9..f4e84c4478 100644 --- a/src/lib/libcrypto/buffer/buffer.c +++ b/src/lib/libcrypto/buffer/buffer.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: buffer.c,v 1.26 2017/04/09 15:06:20 jsing Exp $ */ | 1 | /* $OpenBSD: buffer.c,v 1.27 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 | * |
@@ -89,10 +89,7 @@ BUF_MEM_free(BUF_MEM *a) | |||
89 | if (a == NULL) | 89 | if (a == NULL) |
90 | return; | 90 | return; |
91 | 91 | ||
92 | if (a->data != NULL) { | 92 | freezero(a->data, a->max); |
93 | explicit_bzero(a->data, a->max); | ||
94 | free(a->data); | ||
95 | } | ||
96 | free(a); | 93 | free(a); |
97 | } | 94 | } |
98 | 95 | ||
diff --git a/src/lib/libcrypto/dsa/dsa_asn1.c b/src/lib/libcrypto/dsa/dsa_asn1.c index d7b77470bd..f7dfaf1d9c 100644 --- a/src/lib/libcrypto/dsa/dsa_asn1.c +++ b/src/lib/libcrypto/dsa/dsa_asn1.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dsa_asn1.c,v 1.19 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: dsa_asn1.c,v 1.20 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -454,10 +454,7 @@ DSA_verify(int type, const unsigned char *dgst, int dgst_len, | |||
454 | goto err; | 454 | goto err; |
455 | ret = DSA_do_verify(dgst, dgst_len, s, dsa); | 455 | ret = DSA_do_verify(dgst, dgst_len, s, dsa); |
456 | err: | 456 | err: |
457 | if (derlen > 0) { | 457 | freezero(der, derlen); |
458 | explicit_bzero(der, derlen); | ||
459 | free(der); | ||
460 | } | ||
461 | DSA_SIG_free(s); | 458 | DSA_SIG_free(s); |
462 | return ret; | 459 | return ret; |
463 | } | 460 | } |
diff --git a/src/lib/libcrypto/ec/ec_key.c b/src/lib/libcrypto/ec/ec_key.c index 5a23a9823d..595b88cefc 100644 --- a/src/lib/libcrypto/ec/ec_key.c +++ b/src/lib/libcrypto/ec/ec_key.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_key.c,v 1.13 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ec_key.c,v 1.14 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Nils Larsch for the OpenSSL project. | 3 | * Written by Nils Larsch for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -122,9 +122,7 @@ EC_KEY_free(EC_KEY * r) | |||
122 | 122 | ||
123 | EC_EX_DATA_free_all_data(&r->method_data); | 123 | EC_EX_DATA_free_all_data(&r->method_data); |
124 | 124 | ||
125 | explicit_bzero((void *) r, sizeof(EC_KEY)); | 125 | freezero(r, sizeof(EC_KEY)); |
126 | |||
127 | free(r); | ||
128 | } | 126 | } |
129 | 127 | ||
130 | EC_KEY * | 128 | EC_KEY * |
diff --git a/src/lib/libcrypto/ec/ec_lib.c b/src/lib/libcrypto/ec/ec_lib.c index baddbf6dc8..0d062111b5 100644 --- a/src/lib/libcrypto/ec/ec_lib.c +++ b/src/lib/libcrypto/ec/ec_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_lib.c,v 1.23 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ec_lib.c,v 1.24 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Originally written by Bodo Moeller for the OpenSSL project. | 3 | * Originally written by Bodo Moeller for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -151,12 +151,8 @@ EC_GROUP_clear_free(EC_GROUP * group) | |||
151 | BN_clear_free(&group->order); | 151 | BN_clear_free(&group->order); |
152 | BN_clear_free(&group->cofactor); | 152 | BN_clear_free(&group->cofactor); |
153 | 153 | ||
154 | if (group->seed) { | 154 | freezero(group->seed, group->seed_len); |
155 | explicit_bzero(group->seed, group->seed_len); | 155 | freezero(group, sizeof *group); |
156 | free(group->seed); | ||
157 | } | ||
158 | explicit_bzero(group, sizeof *group); | ||
159 | free(group); | ||
160 | } | 156 | } |
161 | 157 | ||
162 | 158 | ||
@@ -743,8 +739,7 @@ EC_POINT_clear_free(EC_POINT * point) | |||
743 | point->meth->point_clear_finish(point); | 739 | point->meth->point_clear_finish(point); |
744 | else if (point->meth->point_finish != 0) | 740 | else if (point->meth->point_finish != 0) |
745 | point->meth->point_finish(point); | 741 | point->meth->point_finish(point); |
746 | explicit_bzero(point, sizeof *point); | 742 | freezero(point, sizeof *point); |
747 | free(point); | ||
748 | } | 743 | } |
749 | 744 | ||
750 | 745 | ||
diff --git a/src/lib/libcrypto/ec/ec_mult.c b/src/lib/libcrypto/ec/ec_mult.c index e44104d21c..a565263bb6 100644 --- a/src/lib/libcrypto/ec/ec_mult.c +++ b/src/lib/libcrypto/ec/ec_mult.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_mult.c,v 1.20 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ec_mult.c,v 1.21 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. | 3 | * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -177,8 +177,7 @@ ec_pre_comp_clear_free(void *pre_) | |||
177 | } | 177 | } |
178 | free(pre->points); | 178 | free(pre->points); |
179 | } | 179 | } |
180 | explicit_bzero(pre, sizeof *pre); | 180 | freezero(pre, sizeof *pre); |
181 | free(pre); | ||
182 | } | 181 | } |
183 | 182 | ||
184 | 183 | ||
diff --git a/src/lib/libcrypto/ec/ecp_nistp224.c b/src/lib/libcrypto/ec/ecp_nistp224.c index 38dd83b6d9..fce74578c7 100644 --- a/src/lib/libcrypto/ec/ecp_nistp224.c +++ b/src/lib/libcrypto/ec/ecp_nistp224.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistp224.c,v 1.18 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ecp_nistp224.c,v 1.19 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Emilia Kasper (Google) for the OpenSSL project. | 3 | * Written by Emilia Kasper (Google) for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -1239,8 +1239,7 @@ nistp224_pre_comp_clear_free(void *pre_) | |||
1239 | if (i > 0) | 1239 | if (i > 0) |
1240 | return; | 1240 | return; |
1241 | 1241 | ||
1242 | explicit_bzero(pre, sizeof *pre); | 1242 | freezero(pre, sizeof *pre); |
1243 | free(pre); | ||
1244 | } | 1243 | } |
1245 | 1244 | ||
1246 | /******************************************************************************/ | 1245 | /******************************************************************************/ |
diff --git a/src/lib/libcrypto/ec/ecp_nistp256.c b/src/lib/libcrypto/ec/ecp_nistp256.c index 4771a92efd..6f3ec3c250 100644 --- a/src/lib/libcrypto/ec/ecp_nistp256.c +++ b/src/lib/libcrypto/ec/ecp_nistp256.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistp256.c,v 1.17 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ecp_nistp256.c,v 1.18 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Adam Langley (Google) for the OpenSSL project | 3 | * Written by Adam Langley (Google) for the OpenSSL project |
4 | */ | 4 | */ |
@@ -1788,8 +1788,7 @@ nistp256_pre_comp_clear_free(void *pre_) | |||
1788 | if (i > 0) | 1788 | if (i > 0) |
1789 | return; | 1789 | return; |
1790 | 1790 | ||
1791 | explicit_bzero(pre, sizeof *pre); | 1791 | freezero(pre, sizeof *pre); |
1792 | free(pre); | ||
1793 | } | 1792 | } |
1794 | 1793 | ||
1795 | /******************************************************************************/ | 1794 | /******************************************************************************/ |
diff --git a/src/lib/libcrypto/ec/ecp_nistp521.c b/src/lib/libcrypto/ec/ecp_nistp521.c index 22bafe392f..6dbc266937 100644 --- a/src/lib/libcrypto/ec/ecp_nistp521.c +++ b/src/lib/libcrypto/ec/ecp_nistp521.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistp521.c,v 1.18 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ecp_nistp521.c,v 1.19 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Adam Langley (Google) for the OpenSSL project | 3 | * Written by Adam Langley (Google) for the OpenSSL project |
4 | */ | 4 | */ |
@@ -1679,8 +1679,7 @@ nistp521_pre_comp_clear_free(void *pre_) | |||
1679 | if (i > 0) | 1679 | if (i > 0) |
1680 | return; | 1680 | return; |
1681 | 1681 | ||
1682 | explicit_bzero(pre, sizeof(*pre)); | 1682 | freezero(pre, sizeof(*pre)); |
1683 | free(pre); | ||
1684 | } | 1683 | } |
1685 | 1684 | ||
1686 | /******************************************************************************/ | 1685 | /******************************************************************************/ |
diff --git a/src/lib/libcrypto/ec/ecp_nistz256.c b/src/lib/libcrypto/ec/ecp_nistz256.c index 848f15cb17..b3b8f74b14 100644 --- a/src/lib/libcrypto/ec/ecp_nistz256.c +++ b/src/lib/libcrypto/ec/ecp_nistz256.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistz256.c,v 1.2 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ecp_nistz256.c,v 1.3 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* Copyright (c) 2014, Intel Corporation. | 2 | /* Copyright (c) 2014, Intel Corporation. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
@@ -1118,11 +1118,9 @@ ecp_nistz256_pre_comp_clear_free(void *pre_) | |||
1118 | * here, but the only place where we allocate this uses | 1118 | * here, but the only place where we allocate this uses |
1119 | * PRECOMP256_ROW (i.e. 64 P256_POINT_AFFINE) but sets w == 7. | 1119 | * PRECOMP256_ROW (i.e. 64 P256_POINT_AFFINE) but sets w == 7. |
1120 | */ | 1120 | */ |
1121 | explicit_bzero(pre->precomp, 37 * sizeof(PRECOMP256_ROW)); | 1121 | freezero(pre->precomp, 37 * sizeof(PRECOMP256_ROW)); |
1122 | free(pre->precomp); | ||
1123 | } | 1122 | } |
1124 | explicit_bzero(pre, sizeof *pre); | 1123 | freezero(pre, sizeof *pre); |
1125 | free(pre); | ||
1126 | } | 1124 | } |
1127 | 1125 | ||
1128 | static int | 1126 | static int |
diff --git a/src/lib/libcrypto/ecdh/ech_lib.c b/src/lib/libcrypto/ecdh/ech_lib.c index 06e6a1ee22..2846a88612 100644 --- a/src/lib/libcrypto/ecdh/ech_lib.c +++ b/src/lib/libcrypto/ecdh/ech_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ech_lib.c,v 1.12 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ech_lib.c,v 1.13 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. | 3 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. |
4 | * | 4 | * |
@@ -182,9 +182,7 @@ ecdh_data_free(void *data) | |||
182 | 182 | ||
183 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDH, r, &r->ex_data); | 183 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDH, r, &r->ex_data); |
184 | 184 | ||
185 | explicit_bzero((void *)r, sizeof(ECDH_DATA)); | 185 | freezero(r, sizeof(ECDH_DATA)); |
186 | |||
187 | free(r); | ||
188 | } | 186 | } |
189 | 187 | ||
190 | ECDH_DATA * | 188 | ECDH_DATA * |
diff --git a/src/lib/libcrypto/ecdsa/ecs_lib.c b/src/lib/libcrypto/ecdsa/ecs_lib.c index ca0f51b366..4fbe1e060b 100644 --- a/src/lib/libcrypto/ecdsa/ecs_lib.c +++ b/src/lib/libcrypto/ecdsa/ecs_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecs_lib.c,v 1.11 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: ecs_lib.c,v 1.12 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -169,9 +169,7 @@ ecdsa_data_free(void *data) | |||
169 | #endif | 169 | #endif |
170 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDSA, r, &r->ex_data); | 170 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDSA, r, &r->ex_data); |
171 | 171 | ||
172 | explicit_bzero((void *)r, sizeof(ECDSA_DATA)); | 172 | freezero(r, sizeof(ECDSA_DATA)); |
173 | |||
174 | free(r); | ||
175 | } | 173 | } |
176 | 174 | ||
177 | ECDSA_DATA * | 175 | ECDSA_DATA * |
diff --git a/src/lib/libcrypto/ecdsa/ecs_vrf.c b/src/lib/libcrypto/ecdsa/ecs_vrf.c index a4b627ace6..270af94c0d 100644 --- a/src/lib/libcrypto/ecdsa/ecs_vrf.c +++ b/src/lib/libcrypto/ecdsa/ecs_vrf.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecs_vrf.c,v 1.5 2015/02/08 13:35:07 jsing Exp $ */ | 1 | /* $OpenBSD: ecs_vrf.c,v 1.6 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Nils Larsch for the OpenSSL project | 3 | * Written by Nils Larsch for the OpenSSL project |
4 | */ | 4 | */ |
@@ -107,10 +107,7 @@ ECDSA_verify(int type, const unsigned char *dgst, int dgst_len, | |||
107 | ret = ECDSA_do_verify(dgst, dgst_len, s, eckey); | 107 | ret = ECDSA_do_verify(dgst, dgst_len, s, eckey); |
108 | 108 | ||
109 | err: | 109 | err: |
110 | if (derlen > 0) { | 110 | freezero(der, derlen); |
111 | explicit_bzero(der, derlen); | ||
112 | free(der); | ||
113 | } | ||
114 | ECDSA_SIG_free(s); | 111 | ECDSA_SIG_free(s); |
115 | return (ret); | 112 | return (ret); |
116 | } | 113 | } |
diff --git a/src/lib/libcrypto/evp/bio_enc.c b/src/lib/libcrypto/evp/bio_enc.c index 1920c6d180..7c7cf9a8b3 100644 --- a/src/lib/libcrypto/evp/bio_enc.c +++ b/src/lib/libcrypto/evp/bio_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bio_enc.c,v 1.19 2015/09/10 15:56:25 jsing Exp $ */ | 1 | /* $OpenBSD: bio_enc.c,v 1.20 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 | * |
@@ -135,8 +135,7 @@ enc_free(BIO *a) | |||
135 | return (0); | 135 | return (0); |
136 | b = (BIO_ENC_CTX *)a->ptr; | 136 | b = (BIO_ENC_CTX *)a->ptr; |
137 | EVP_CIPHER_CTX_cleanup(&(b->cipher)); | 137 | EVP_CIPHER_CTX_cleanup(&(b->cipher)); |
138 | explicit_bzero(a->ptr, sizeof(BIO_ENC_CTX)); | 138 | freezero(a->ptr, sizeof(BIO_ENC_CTX)); |
139 | free(a->ptr); | ||
140 | a->ptr = NULL; | 139 | a->ptr = NULL; |
141 | a->init = 0; | 140 | a->init = 0; |
142 | a->flags = 0; | 141 | a->flags = 0; |
diff --git a/src/lib/libcrypto/evp/digest.c b/src/lib/libcrypto/evp/digest.c index ee1f955959..7471c1e822 100644 --- a/src/lib/libcrypto/evp/digest.c +++ b/src/lib/libcrypto/evp/digest.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: digest.c,v 1.27 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: digest.c,v 1.28 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 | * |
@@ -193,8 +193,7 @@ EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | |||
193 | if (ctx->digest != type) { | 193 | if (ctx->digest != type) { |
194 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && | 194 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && |
195 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { | 195 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { |
196 | explicit_bzero(ctx->md_data, ctx->digest->ctx_size); | 196 | freezero(ctx->md_data, ctx->digest->ctx_size); |
197 | free(ctx->md_data); | ||
198 | ctx->md_data = NULL; | 197 | ctx->md_data = NULL; |
199 | } | 198 | } |
200 | ctx->digest = type; | 199 | ctx->digest = type; |
@@ -360,10 +359,8 @@ EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) | |||
360 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED)) | 359 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED)) |
361 | ctx->digest->cleanup(ctx); | 360 | ctx->digest->cleanup(ctx); |
362 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && | 361 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && |
363 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { | 362 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) |
364 | explicit_bzero(ctx->md_data, ctx->digest->ctx_size); | 363 | freezero(ctx->md_data, ctx->digest->ctx_size); |
365 | free(ctx->md_data); | ||
366 | } | ||
367 | EVP_PKEY_CTX_free(ctx->pctx); | 364 | EVP_PKEY_CTX_free(ctx->pctx); |
368 | #ifndef OPENSSL_NO_ENGINE | 365 | #ifndef OPENSSL_NO_ENGINE |
369 | if (ctx->engine) | 366 | if (ctx->engine) |
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c index 97cb5154a5..7c713db026 100644 --- a/src/lib/libcrypto/evp/e_aes.c +++ b/src/lib/libcrypto/evp/e_aes.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: e_aes.c,v 1.33 2017/01/31 13:17:21 inoguchi Exp $ */ | 1 | /* $OpenBSD: e_aes.c,v 1.34 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -1422,8 +1422,7 @@ aead_aes_gcm_cleanup(EVP_AEAD_CTX *ctx) | |||
1422 | { | 1422 | { |
1423 | struct aead_aes_gcm_ctx *gcm_ctx = ctx->aead_state; | 1423 | struct aead_aes_gcm_ctx *gcm_ctx = ctx->aead_state; |
1424 | 1424 | ||
1425 | explicit_bzero(gcm_ctx, sizeof(*gcm_ctx)); | 1425 | freezero(gcm_ctx, sizeof(*gcm_ctx)); |
1426 | free(gcm_ctx); | ||
1427 | } | 1426 | } |
1428 | 1427 | ||
1429 | static int | 1428 | static int |
diff --git a/src/lib/libcrypto/evp/e_chacha20poly1305.c b/src/lib/libcrypto/evp/e_chacha20poly1305.c index e135f9a104..051d5548b5 100644 --- a/src/lib/libcrypto/evp/e_chacha20poly1305.c +++ b/src/lib/libcrypto/evp/e_chacha20poly1305.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: e_chacha20poly1305.c,v 1.15 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: e_chacha20poly1305.c,v 1.16 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2015 Reyk Floter <reyk@openbsd.org> | 4 | * Copyright (c) 2015 Reyk Floter <reyk@openbsd.org> |
@@ -83,8 +83,7 @@ aead_chacha20_poly1305_cleanup(EVP_AEAD_CTX *ctx) | |||
83 | { | 83 | { |
84 | struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state; | 84 | struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state; |
85 | 85 | ||
86 | explicit_bzero(c20_ctx->key, sizeof(c20_ctx->key)); | 86 | freezero(c20_ctx, sizeof(c20_ctx)); |
87 | free(c20_ctx); | ||
88 | } | 87 | } |
89 | 88 | ||
90 | static void | 89 | static void |
diff --git a/src/lib/libcrypto/evp/p_open.c b/src/lib/libcrypto/evp/p_open.c index 1eb238dfde..57a46706b9 100644 --- a/src/lib/libcrypto/evp/p_open.c +++ b/src/lib/libcrypto/evp/p_open.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p_open.c,v 1.18 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: p_open.c,v 1.19 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 | * |
@@ -109,9 +109,7 @@ EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, | |||
109 | ret = 1; | 109 | ret = 1; |
110 | 110 | ||
111 | err: | 111 | err: |
112 | if (key != NULL) | 112 | freezero(key, size); |
113 | explicit_bzero(key, size); | ||
114 | free(key); | ||
115 | return (ret); | 113 | return (ret); |
116 | } | 114 | } |
117 | 115 | ||
diff --git a/src/lib/libcrypto/gost/gostr341001_key.c b/src/lib/libcrypto/gost/gostr341001_key.c index 0a42a15378..0af39f21bf 100644 --- a/src/lib/libcrypto/gost/gostr341001_key.c +++ b/src/lib/libcrypto/gost/gostr341001_key.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: gostr341001_key.c,v 1.7 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: gostr341001_key.c,v 1.8 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
4 | * Copyright (c) 2005-2006 Cryptocom LTD | 4 | * Copyright (c) 2005-2006 Cryptocom LTD |
@@ -105,8 +105,7 @@ GOST_KEY_free(GOST_KEY *r) | |||
105 | EC_POINT_free(r->pub_key); | 105 | EC_POINT_free(r->pub_key); |
106 | BN_clear_free(r->priv_key); | 106 | BN_clear_free(r->priv_key); |
107 | 107 | ||
108 | explicit_bzero((void *)r, sizeof(GOST_KEY)); | 108 | freezero(r, sizeof(GOST_KEY)); |
109 | free(r); | ||
110 | } | 109 | } |
111 | 110 | ||
112 | int | 111 | int |
diff --git a/src/lib/libcrypto/hmac/hm_pmeth.c b/src/lib/libcrypto/hmac/hm_pmeth.c index c5ac6c00c0..390725fa25 100644 --- a/src/lib/libcrypto/hmac/hm_pmeth.c +++ b/src/lib/libcrypto/hmac/hm_pmeth.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: hm_pmeth.c,v 1.9 2015/09/10 15:56:25 jsing Exp $ */ | 1 | /* $OpenBSD: hm_pmeth.c,v 1.10 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2007. | 3 | * project 2007. |
4 | */ | 4 | */ |
@@ -122,12 +122,7 @@ pkey_hmac_cleanup(EVP_PKEY_CTX *ctx) | |||
122 | HMAC_PKEY_CTX *hctx = ctx->data; | 122 | HMAC_PKEY_CTX *hctx = ctx->data; |
123 | 123 | ||
124 | HMAC_CTX_cleanup(&hctx->ctx); | 124 | HMAC_CTX_cleanup(&hctx->ctx); |
125 | if (hctx->ktmp.data) { | 125 | freezero(hctx->ktmp.data, hctx->ktmp.length); |
126 | if (hctx->ktmp.length) | ||
127 | explicit_bzero(hctx->ktmp.data, hctx->ktmp.length); | ||
128 | free(hctx->ktmp.data); | ||
129 | hctx->ktmp.data = NULL; | ||
130 | } | ||
131 | free(hctx); | 126 | free(hctx); |
132 | } | 127 | } |
133 | 128 | ||
diff --git a/src/lib/libcrypto/malloc-wrapper.c b/src/lib/libcrypto/malloc-wrapper.c index 6ba0aad7e4..12867387bf 100644 --- a/src/lib/libcrypto/malloc-wrapper.c +++ b/src/lib/libcrypto/malloc-wrapper.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: malloc-wrapper.c,v 1.5 2017/04/28 22:46:40 beck Exp $ */ | 1 | /* $OpenBSD: malloc-wrapper.c,v 1.6 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Bob Beck | 3 | * Copyright (c) 2014 Bob Beck |
4 | * | 4 | * |
@@ -165,8 +165,7 @@ CRYPTO_realloc_clean(void *ptr, int old_len, int num, const char *file, | |||
165 | ret = malloc(num); | 165 | ret = malloc(num); |
166 | if (ret && ptr && old_len > 0) { | 166 | if (ret && ptr && old_len > 0) { |
167 | memcpy(ret, ptr, old_len); | 167 | memcpy(ret, ptr, old_len); |
168 | explicit_bzero(ptr, old_len); | 168 | freezero(ptr, old_len); |
169 | free(ptr); | ||
170 | } | 169 | } |
171 | return ret; | 170 | return ret; |
172 | } | 171 | } |
diff --git a/src/lib/libcrypto/modes/gcm128.c b/src/lib/libcrypto/modes/gcm128.c index 95ee755f83..c080d9c16a 100644 --- a/src/lib/libcrypto/modes/gcm128.c +++ b/src/lib/libcrypto/modes/gcm128.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: gcm128.c,v 1.15 2016/11/04 17:30:30 miod Exp $ */ | 1 | /* $OpenBSD: gcm128.c,v 1.16 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 2010 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 2010 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -1538,8 +1538,5 @@ GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block) | |||
1538 | 1538 | ||
1539 | void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx) | 1539 | void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx) |
1540 | { | 1540 | { |
1541 | if (ctx) { | 1541 | freezero(ctx, sizeof(*ctx)); |
1542 | explicit_bzero(ctx,sizeof(*ctx)); | ||
1543 | free(ctx); | ||
1544 | } | ||
1545 | } | 1542 | } |
diff --git a/src/lib/libcrypto/pem/pem_lib.c b/src/lib/libcrypto/pem/pem_lib.c index b2c72e1d76..0f7c36d21c 100644 --- a/src/lib/libcrypto/pem/pem_lib.c +++ b/src/lib/libcrypto/pem/pem_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pem_lib.c,v 1.44 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: pem_lib.c,v 1.45 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 | * |
@@ -425,10 +425,7 @@ err: | |||
425 | explicit_bzero(iv, sizeof(iv)); | 425 | explicit_bzero(iv, sizeof(iv)); |
426 | explicit_bzero((char *)&ctx, sizeof(ctx)); | 426 | explicit_bzero((char *)&ctx, sizeof(ctx)); |
427 | explicit_bzero(buf, PEM_BUFSIZE); | 427 | explicit_bzero(buf, PEM_BUFSIZE); |
428 | if (data != NULL) { | 428 | freezero(data, (unsigned int)dsize); |
429 | explicit_bzero(data, (unsigned int)dsize); | ||
430 | free(data); | ||
431 | } | ||
432 | return (ret); | 429 | return (ret); |
433 | } | 430 | } |
434 | 431 | ||
@@ -626,8 +623,7 @@ PEM_write_bio(BIO *bp, const char *name, char *header, unsigned char *data, | |||
626 | EVP_EncodeFinal(&ctx, buf, &outl); | 623 | EVP_EncodeFinal(&ctx, buf, &outl); |
627 | if ((outl > 0) && (BIO_write(bp, (char *)buf, outl) != outl)) | 624 | if ((outl > 0) && (BIO_write(bp, (char *)buf, outl) != outl)) |
628 | goto err; | 625 | goto err; |
629 | explicit_bzero(buf, PEM_BUFSIZE * 8); | 626 | freezero(buf, PEM_BUFSIZE * 8); |
630 | free(buf); | ||
631 | buf = NULL; | 627 | buf = NULL; |
632 | if ((BIO_write(bp, "-----END ", 9) != 9) || | 628 | if ((BIO_write(bp, "-----END ", 9) != 9) || |
633 | (BIO_write(bp, name, nlen) != nlen) || | 629 | (BIO_write(bp, name, nlen) != nlen) || |
@@ -636,10 +632,7 @@ PEM_write_bio(BIO *bp, const char *name, char *header, unsigned char *data, | |||
636 | return (i + outl); | 632 | return (i + outl); |
637 | 633 | ||
638 | err: | 634 | err: |
639 | if (buf) { | 635 | freezero(buf, PEM_BUFSIZE * 8); |
640 | explicit_bzero(buf, PEM_BUFSIZE * 8); | ||
641 | free(buf); | ||
642 | } | ||
643 | PEMerror(reason); | 636 | PEMerror(reason); |
644 | return (0); | 637 | return (0); |
645 | } | 638 | } |
diff --git a/src/lib/libcrypto/pem/pem_pkey.c b/src/lib/libcrypto/pem/pem_pkey.c index 6651ef9419..89181a25f7 100644 --- a/src/lib/libcrypto/pem/pem_pkey.c +++ b/src/lib/libcrypto/pem/pem_pkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pem_pkey.c,v 1.22 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: pem_pkey.c,v 1.23 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 | * |
@@ -143,8 +143,7 @@ p8err: | |||
143 | PEMerror(ERR_R_ASN1_LIB); | 143 | PEMerror(ERR_R_ASN1_LIB); |
144 | err: | 144 | err: |
145 | free(nm); | 145 | free(nm); |
146 | explicit_bzero(data, len); | 146 | freezero(data, len); |
147 | free(data); | ||
148 | return (ret); | 147 | return (ret); |
149 | } | 148 | } |
150 | 149 | ||
diff --git a/src/lib/libcrypto/pem/pvkfmt.c b/src/lib/libcrypto/pem/pvkfmt.c index 5ed8df585f..18de5d52a4 100644 --- a/src/lib/libcrypto/pem/pvkfmt.c +++ b/src/lib/libcrypto/pem/pvkfmt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pvkfmt.c,v 1.18 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: pvkfmt.c,v 1.19 2017/05/02 03:59:44 deraadt Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2005. | 3 | * project 2005. |
4 | */ | 4 | */ |
@@ -828,10 +828,7 @@ b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u) | |||
828 | ret = do_PVK_body(&p, saltlen, keylen, cb, u); | 828 | ret = do_PVK_body(&p, saltlen, keylen, cb, u); |
829 | 829 | ||
830 | err: | 830 | err: |
831 | if (buf) { | 831 | freezero(buf, buflen); |
832 | explicit_bzero(buf, buflen); | ||
833 | free(buf); | ||
834 | } | ||
835 | return ret; | 832 | return ret; |
836 | } | 833 | } |
837 | 834 | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_key.c b/src/lib/libcrypto/pkcs12/p12_key.c index fd710771a5..d419a9d835 100644 --- a/src/lib/libcrypto/pkcs12/p12_key.c +++ b/src/lib/libcrypto/pkcs12/p12_key.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p12_key.c,v 1.25 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: p12_key.c,v 1.26 2017/05/02 03:59:45 deraadt Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -88,10 +88,7 @@ PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, | |||
88 | id, iter, n, out, md_type); | 88 | id, iter, n, out, md_type); |
89 | if (ret <= 0) | 89 | if (ret <= 0) |
90 | return 0; | 90 | return 0; |
91 | if (unipass) { | 91 | freezero(unipass, uniplen); |
92 | explicit_bzero(unipass, uniplen); | ||
93 | free(unipass); | ||
94 | } | ||
95 | return ret; | 92 | return ret; |
96 | } | 93 | } |
97 | 94 | ||
diff --git a/src/lib/libcrypto/pkcs7/pk7_doit.c b/src/lib/libcrypto/pkcs7/pk7_doit.c index 484620a686..24ab957b4c 100644 --- a/src/lib/libcrypto/pkcs7/pk7_doit.c +++ b/src/lib/libcrypto/pkcs7/pk7_doit.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pk7_doit.c,v 1.41 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: pk7_doit.c,v 1.42 2017/05/02 03:59:45 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,10 +231,7 @@ pkcs7_decrypt_rinfo(unsigned char **pek, int *peklen, PKCS7_RECIP_INFO *ri, | |||
231 | 231 | ||
232 | ret = 1; | 232 | ret = 1; |
233 | 233 | ||
234 | if (*pek) { | 234 | freezero(*pek, *peklen); |
235 | explicit_bzero(*pek, *peklen); | ||
236 | free(*pek); | ||
237 | } | ||
238 | 235 | ||
239 | *pek = ek; | 236 | *pek = ek; |
240 | *peklen = eklen; | 237 | *peklen = eklen; |
@@ -577,8 +574,7 @@ PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert) | |||
577 | */ | 574 | */ |
578 | if (!EVP_CIPHER_CTX_set_key_length(evp_ctx, eklen)) { | 575 | if (!EVP_CIPHER_CTX_set_key_length(evp_ctx, eklen)) { |
579 | /* Use random key as MMA defence */ | 576 | /* Use random key as MMA defence */ |
580 | explicit_bzero(ek, eklen); | 577 | freezero(ek, eklen); |
581 | free(ek); | ||
582 | ek = tkey; | 578 | ek = tkey; |
583 | eklen = tkeylen; | 579 | eklen = tkeylen; |
584 | tkey = NULL; | 580 | tkey = NULL; |
@@ -589,16 +585,10 @@ PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert) | |||
589 | if (EVP_CipherInit_ex(evp_ctx, NULL, NULL, ek, NULL, 0) <= 0) | 585 | if (EVP_CipherInit_ex(evp_ctx, NULL, NULL, ek, NULL, 0) <= 0) |
590 | goto err; | 586 | goto err; |
591 | 587 | ||
592 | if (ek) { | 588 | freezero(ek, eklen); |
593 | explicit_bzero(ek, eklen); | 589 | ek = NULL; |
594 | free(ek); | 590 | freezero(tkey, tkeylen); |
595 | ek = NULL; | 591 | tkey = NULL; |
596 | } | ||
597 | if (tkey) { | ||
598 | explicit_bzero(tkey, tkeylen); | ||
599 | free(tkey); | ||
600 | tkey = NULL; | ||
601 | } | ||
602 | 592 | ||
603 | if (out == NULL) | 593 | if (out == NULL) |
604 | out = etmp; | 594 | out = etmp; |
@@ -623,14 +613,8 @@ PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert) | |||
623 | 613 | ||
624 | if (0) { | 614 | if (0) { |
625 | err: | 615 | err: |
626 | if (ek) { | 616 | freezero(ek, eklen); |
627 | explicit_bzero(ek, eklen); | 617 | freezero(tkey, tkeylen); |
628 | free(ek); | ||
629 | } | ||
630 | if (tkey) { | ||
631 | explicit_bzero(tkey, tkeylen); | ||
632 | free(tkey); | ||
633 | } | ||
634 | if (out != NULL) | 618 | if (out != NULL) |
635 | BIO_free_all(out); | 619 | BIO_free_all(out); |
636 | if (btmp != NULL) | 620 | if (btmp != NULL) |
diff --git a/src/lib/libcrypto/rsa/rsa_eay.c b/src/lib/libcrypto/rsa/rsa_eay.c index f9f620ae23..6c3da0d656 100644 --- a/src/lib/libcrypto/rsa/rsa_eay.c +++ b/src/lib/libcrypto/rsa/rsa_eay.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: rsa_eay.c,v 1.48 2017/04/28 22:46:40 beck Exp $ */ | 1 | /* $OpenBSD: rsa_eay.c,v 1.49 2017/05/02 03:59:45 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 | * |
@@ -244,10 +244,7 @@ err: | |||
244 | BN_CTX_end(ctx); | 244 | BN_CTX_end(ctx); |
245 | BN_CTX_free(ctx); | 245 | BN_CTX_free(ctx); |
246 | } | 246 | } |
247 | if (buf != NULL) { | 247 | freezero(buf, num); |
248 | explicit_bzero(buf, num); | ||
249 | free(buf); | ||
250 | } | ||
251 | return r; | 248 | return r; |
252 | } | 249 | } |
253 | 250 | ||
@@ -468,10 +465,7 @@ err: | |||
468 | BN_CTX_end(ctx); | 465 | BN_CTX_end(ctx); |
469 | BN_CTX_free(ctx); | 466 | BN_CTX_free(ctx); |
470 | } | 467 | } |
471 | if (buf != NULL) { | 468 | freezero(buf, num); |
472 | explicit_bzero(buf, num); | ||
473 | free(buf); | ||
474 | } | ||
475 | return r; | 469 | return r; |
476 | } | 470 | } |
477 | 471 | ||
@@ -597,10 +591,7 @@ err: | |||
597 | BN_CTX_end(ctx); | 591 | BN_CTX_end(ctx); |
598 | BN_CTX_free(ctx); | 592 | BN_CTX_free(ctx); |
599 | } | 593 | } |
600 | if (buf != NULL) { | 594 | freezero(buf, num); |
601 | explicit_bzero(buf, num); | ||
602 | free(buf); | ||
603 | } | ||
604 | return r; | 595 | return r; |
605 | } | 596 | } |
606 | 597 | ||
@@ -700,10 +691,7 @@ err: | |||
700 | BN_CTX_end(ctx); | 691 | BN_CTX_end(ctx); |
701 | BN_CTX_free(ctx); | 692 | BN_CTX_free(ctx); |
702 | } | 693 | } |
703 | if (buf != NULL) { | 694 | freezero(buf, num); |
704 | explicit_bzero(buf, num); | ||
705 | free(buf); | ||
706 | } | ||
707 | return r; | 695 | return r; |
708 | } | 696 | } |
709 | 697 | ||
diff --git a/src/lib/libcrypto/rsa/rsa_saos.c b/src/lib/libcrypto/rsa/rsa_saos.c index 10184b6c18..e1fbdcb5df 100644 --- a/src/lib/libcrypto/rsa/rsa_saos.c +++ b/src/lib/libcrypto/rsa/rsa_saos.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: rsa_saos.c,v 1.22 2017/04/28 22:46:40 beck Exp $ */ | 1 | /* $OpenBSD: rsa_saos.c,v 1.23 2017/05/02 03:59:45 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 | * |
@@ -96,8 +96,7 @@ RSA_sign_ASN1_OCTET_STRING(int type, const unsigned char *m, unsigned int m_len, | |||
96 | else | 96 | else |
97 | *siglen = i; | 97 | *siglen = i; |
98 | 98 | ||
99 | explicit_bzero(s, (unsigned int)j + 1); | 99 | freezero(s, (unsigned int)j + 1); |
100 | free(s); | ||
101 | return ret; | 100 | return ret; |
102 | } | 101 | } |
103 | 102 | ||
@@ -137,9 +136,6 @@ RSA_verify_ASN1_OCTET_STRING(int dtype, const unsigned char *m, | |||
137 | ret = 1; | 136 | ret = 1; |
138 | err: | 137 | err: |
139 | ASN1_OCTET_STRING_free(sig); | 138 | ASN1_OCTET_STRING_free(sig); |
140 | if (s != NULL) { | 139 | freezero(s, (unsigned int)siglen); |
141 | explicit_bzero(s, (unsigned int)siglen); | ||
142 | free(s); | ||
143 | } | ||
144 | return ret; | 140 | return ret; |
145 | } | 141 | } |
diff --git a/src/lib/libcrypto/rsa/rsa_sign.c b/src/lib/libcrypto/rsa/rsa_sign.c index 818b88c604..6e9e869f0a 100644 --- a/src/lib/libcrypto/rsa/rsa_sign.c +++ b/src/lib/libcrypto/rsa/rsa_sign.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: rsa_sign.c,v 1.28 2017/04/28 22:46:40 beck Exp $ */ | 1 | /* $OpenBSD: rsa_sign.c,v 1.29 2017/05/02 03:59:45 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 | * |
@@ -135,10 +135,8 @@ RSA_sign(int type, const unsigned char *m, unsigned int m_len, | |||
135 | else | 135 | else |
136 | *siglen = i; | 136 | *siglen = i; |
137 | 137 | ||
138 | if (type != NID_md5_sha1) { | 138 | if (type != NID_md5_sha1) |
139 | explicit_bzero(tmps, (unsigned int)j + 1); | 139 | freezero(tmps, (unsigned int)j + 1); |
140 | free(tmps); | ||
141 | } | ||
142 | return (ret); | 140 | return (ret); |
143 | } | 141 | } |
144 | 142 | ||
@@ -232,12 +230,8 @@ int_rsa_verify(int dtype, const unsigned char *m, unsigned int m_len, | |||
232 | ret = 1; | 230 | ret = 1; |
233 | } | 231 | } |
234 | err: | 232 | err: |
235 | if (sig != NULL) | 233 | X509_SIG_free(sig); |
236 | X509_SIG_free(sig); | 234 | freezero(s, (unsigned int)siglen); |
237 | if (s != NULL) { | ||
238 | explicit_bzero(s, (unsigned int)siglen); | ||
239 | free(s); | ||
240 | } | ||
241 | return ret; | 235 | return ret; |
242 | } | 236 | } |
243 | 237 | ||
diff --git a/src/lib/libtls/tls_config.c b/src/lib/libtls/tls_config.c index 65063117e2..3945da75ac 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.38 2017/04/30 02:10:22 jsing Exp $ */ | 1 | /* $OpenBSD: tls_config.c,v 1.39 2017/05/02 03:59:45 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -188,9 +188,7 @@ tls_config_load_file(struct tls_error *error, const char *filetype, | |||
188 | fail: | 188 | fail: |
189 | if (fd != -1) | 189 | if (fd != -1) |
190 | close(fd); | 190 | close(fd); |
191 | if (*buf != NULL) | 191 | freezero(*buf, *len); |
192 | explicit_bzero(*buf, *len); | ||
193 | free(*buf); | ||
194 | *buf = NULL; | 192 | *buf = NULL; |
195 | *len = 0; | 193 | *len = 0; |
196 | 194 | ||