[openssl-commits] [openssl] master update
Dr. Stephen Henson
steve at openssl.org
Sat Mar 19 01:02:45 UTC 2016
The branch master has been updated
via c6aca19bb5541883cf8233b03d92e9ef6d91357c (commit)
from 769777b0a24c77377c612d84537c40a2b55abfa6 (commit)
- Log -----------------------------------------------------------------
commit c6aca19bb5541883cf8233b03d92e9ef6d91357c
Author: Schüller Felix <F.Schueller at infodas.de>
Date: Fri Mar 18 19:20:34 2016 +0000
Don't free up EVP_MD_CTX.
Don't free up passed EVP_MD_CTX in ASN1_item_sign_ctx(). This
simplifies handling and retains compatiblity with previous behaviour.
PR#4446
Reviewed-by: Rich Salz <rsalz at openssl.org>
Reviewed-by: Richard Levitte <levitte at openssl.org>
Reviewed-by: Stephen Henson <steve at openssl.org>
-----------------------------------------------------------------------
Summary of changes:
apps/req.c | 18 +++---------------
crypto/asn1/a_sign.c | 8 ++++++--
2 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/apps/req.c b/apps/req.c
index b128fa8..edf998b 100644
--- a/apps/req.c
+++ b/apps/req.c
@@ -1523,13 +1523,9 @@ int do_X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
EVP_MD_CTX *mctx = EVP_MD_CTX_new();
rv = do_sign_init(mctx, pkey, md, sigopts);
- /* Note: X509_sign_ctx() calls ASN1_item_sign_ctx(), which destroys
- * the EVP_MD_CTX we send it, so only destroy it here if the former
- * isn't called */
if (rv > 0)
rv = X509_sign_ctx(x, mctx);
- else
- EVP_MD_CTX_free(mctx);
+ EVP_MD_CTX_free(mctx);
return rv > 0 ? 1 : 0;
}
@@ -1539,13 +1535,9 @@ int do_X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
int rv;
EVP_MD_CTX *mctx = EVP_MD_CTX_new();
rv = do_sign_init(mctx, pkey, md, sigopts);
- /* Note: X509_REQ_sign_ctx() calls ASN1_item_sign_ctx(), which destroys
- * the EVP_MD_CTX we send it, so only destroy it here if the former
- * isn't called */
if (rv > 0)
rv = X509_REQ_sign_ctx(x, mctx);
- else
- EVP_MD_CTX_free(mctx);
+ EVP_MD_CTX_free(mctx);
return rv > 0 ? 1 : 0;
}
@@ -1555,12 +1547,8 @@ int do_X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
int rv;
EVP_MD_CTX *mctx = EVP_MD_CTX_new();
rv = do_sign_init(mctx, pkey, md, sigopts);
- /* Note: X509_CRL_sign_ctx() calls ASN1_item_sign_ctx(), which destroys
- * the EVP_MD_CTX we send it, so only destroy it here if the former
- * isn't called */
if (rv > 0)
rv = X509_CRL_sign_ctx(x, mctx);
- else
- EVP_MD_CTX_free(mctx);
+ EVP_MD_CTX_free(mctx);
return rv > 0 ? 1 : 0;
}
diff --git a/crypto/asn1/a_sign.c b/crypto/asn1/a_sign.c
index 2abbe77..616f979 100644
--- a/crypto/asn1/a_sign.c
+++ b/crypto/asn1/a_sign.c
@@ -216,6 +216,7 @@ int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1,
X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *asn,
EVP_PKEY *pkey, const EVP_MD *type)
{
+ int rv;
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
if (ctx == NULL) {
@@ -226,7 +227,11 @@ int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1,
EVP_MD_CTX_free(ctx);
return 0;
}
- return ASN1_item_sign_ctx(it, algor1, algor2, signature, asn, ctx);
+
+ rv = ASN1_item_sign_ctx(it, algor1, algor2, signature, asn, ctx);
+
+ EVP_MD_CTX_free(ctx);
+ return rv;
}
int ASN1_item_sign_ctx(const ASN1_ITEM *it,
@@ -318,7 +323,6 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it,
signature->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);
signature->flags |= ASN1_STRING_FLAG_BITS_LEFT;
err:
- EVP_MD_CTX_free(ctx);
OPENSSL_clear_free((char *)buf_in, (unsigned int)inl);
OPENSSL_clear_free((char *)buf_out, outll);
return (outl);
More information about the openssl-commits
mailing list