diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/evp/digest.c | 12 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/evp/digest.c | 12 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/lib/libcrypto/evp/digest.c b/src/lib/libcrypto/evp/digest.c index d582d7954e..a1be18ee22 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.22 2014/07/12 16:03:37 miod Exp $ */ | 1 | /* $OpenBSD: digest.c,v 1.23 2014/07/13 11:14:02 miod 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 | * |
@@ -192,13 +192,19 @@ EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | |||
192 | } | 192 | } |
193 | #endif | 193 | #endif |
194 | if (ctx->digest != type) { | 194 | if (ctx->digest != type) { |
195 | if (ctx->digest && ctx->digest->ctx_size) | 195 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && |
196 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { | ||
197 | explicit_bzero(ctx->md_data, ctx->digest->ctx_size); | ||
196 | free(ctx->md_data); | 198 | free(ctx->md_data); |
199 | ctx->md_data = NULL; | ||
200 | } | ||
197 | ctx->digest = type; | 201 | ctx->digest = type; |
198 | if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) { | 202 | if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) { |
199 | ctx->update = type->update; | 203 | ctx->update = type->update; |
200 | ctx->md_data = malloc(type->ctx_size); | 204 | ctx->md_data = malloc(type->ctx_size); |
201 | if (ctx->md_data == NULL) { | 205 | if (ctx->md_data == NULL) { |
206 | EVP_PKEY_CTX_free(ctx->pctx); | ||
207 | ctx->pctx = NULL; | ||
202 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, | 208 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, |
203 | ERR_R_MALLOC_FAILURE); | 209 | ERR_R_MALLOC_FAILURE); |
204 | return 0; | 210 | return 0; |
@@ -355,7 +361,7 @@ EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) | |||
355 | ctx->digest->cleanup(ctx); | 361 | ctx->digest->cleanup(ctx); |
356 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && | 362 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && |
357 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { | 363 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { |
358 | OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size); | 364 | explicit_bzero(ctx->md_data, ctx->digest->ctx_size); |
359 | free(ctx->md_data); | 365 | free(ctx->md_data); |
360 | } | 366 | } |
361 | EVP_PKEY_CTX_free(ctx->pctx); | 367 | EVP_PKEY_CTX_free(ctx->pctx); |
diff --git a/src/lib/libssl/src/crypto/evp/digest.c b/src/lib/libssl/src/crypto/evp/digest.c index d582d7954e..a1be18ee22 100644 --- a/src/lib/libssl/src/crypto/evp/digest.c +++ b/src/lib/libssl/src/crypto/evp/digest.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: digest.c,v 1.22 2014/07/12 16:03:37 miod Exp $ */ | 1 | /* $OpenBSD: digest.c,v 1.23 2014/07/13 11:14:02 miod 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 | * |
@@ -192,13 +192,19 @@ EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | |||
192 | } | 192 | } |
193 | #endif | 193 | #endif |
194 | if (ctx->digest != type) { | 194 | if (ctx->digest != type) { |
195 | if (ctx->digest && ctx->digest->ctx_size) | 195 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && |
196 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { | ||
197 | explicit_bzero(ctx->md_data, ctx->digest->ctx_size); | ||
196 | free(ctx->md_data); | 198 | free(ctx->md_data); |
199 | ctx->md_data = NULL; | ||
200 | } | ||
197 | ctx->digest = type; | 201 | ctx->digest = type; |
198 | if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) { | 202 | if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) { |
199 | ctx->update = type->update; | 203 | ctx->update = type->update; |
200 | ctx->md_data = malloc(type->ctx_size); | 204 | ctx->md_data = malloc(type->ctx_size); |
201 | if (ctx->md_data == NULL) { | 205 | if (ctx->md_data == NULL) { |
206 | EVP_PKEY_CTX_free(ctx->pctx); | ||
207 | ctx->pctx = NULL; | ||
202 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, | 208 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, |
203 | ERR_R_MALLOC_FAILURE); | 209 | ERR_R_MALLOC_FAILURE); |
204 | return 0; | 210 | return 0; |
@@ -355,7 +361,7 @@ EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) | |||
355 | ctx->digest->cleanup(ctx); | 361 | ctx->digest->cleanup(ctx); |
356 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && | 362 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && |
357 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { | 363 | !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { |
358 | OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size); | 364 | explicit_bzero(ctx->md_data, ctx->digest->ctx_size); |
359 | free(ctx->md_data); | 365 | free(ctx->md_data); |
360 | } | 366 | } |
361 | EVP_PKEY_CTX_free(ctx->pctx); | 367 | EVP_PKEY_CTX_free(ctx->pctx); |