Fix potential memory leak in PKCS7_signatureVerify()
Fixes #25594 The code jumps to an error block when EVP_VerifyUpdate fails. This error block does not free abuf. In the success path the abuf memory is freed. Move the free operation to the error block. CLA: trivial Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/25596)
This commit is contained in:
parent
80a31435e5
commit
d8b7a6eae9
@ -1018,6 +1018,7 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
|
||||
STACK_OF(X509_ATTRIBUTE) *sk;
|
||||
BIO *btmp;
|
||||
EVP_PKEY *pkey;
|
||||
unsigned char *abuf = NULL;
|
||||
const PKCS7_CTX *ctx = ossl_pkcs7_get0_ctx(p7);
|
||||
OSSL_LIB_CTX *libctx = ossl_pkcs7_ctx_get0_libctx(ctx);
|
||||
const char *propq = ossl_pkcs7_ctx_get0_propq(ctx);
|
||||
@ -1067,7 +1068,7 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
|
||||
|
||||
sk = si->auth_attr;
|
||||
if ((sk != NULL) && (sk_X509_ATTRIBUTE_num(sk) != 0)) {
|
||||
unsigned char md_dat[EVP_MAX_MD_SIZE], *abuf = NULL;
|
||||
unsigned char md_dat[EVP_MAX_MD_SIZE];
|
||||
unsigned int md_len;
|
||||
int alen;
|
||||
ASN1_OCTET_STRING *message_digest;
|
||||
@ -1109,8 +1110,6 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
|
||||
}
|
||||
if (!EVP_VerifyUpdate(mdc_tmp, abuf, alen))
|
||||
goto err;
|
||||
|
||||
OPENSSL_free(abuf);
|
||||
}
|
||||
|
||||
os = si->enc_digest;
|
||||
@ -1128,6 +1127,7 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
OPENSSL_free(abuf);
|
||||
EVP_MD_CTX_free(mdc_tmp);
|
||||
EVP_MD_free(fetched_md);
|
||||
return ret;
|
||||
|
Loading…
x
Reference in New Issue
Block a user