From: Dr. David von Oheimb Date: Thu, 25 May 2023 15:46:48 +0000 (+0200) Subject: CMS_ContentInfo_free(): fix mem leak on encrypted content key X-Git-Tag: openssl-3.1.2~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09dd8153e3a8056c2f6d5d31c702143efa2ca554;p=thirdparty%2Fopenssl.git CMS_ContentInfo_free(): fix mem leak on encrypted content key Fixes #21026 Reviewed-by: Tomas Mraz Reviewed-by: Paul Dale Reviewed-by: David von Oheimb (Merged from https://github.com/openssl/openssl/pull/21058) (cherry picked from commit 7a1857483938b6b6eec5b8760c68c71a71296cd2) --- diff --git a/crypto/cms/cms_env.c b/crypto/cms/cms_env.c index 3105d37726a..bd1f3e7345d 100644 --- a/crypto/cms/cms_env.c +++ b/crypto/cms/cms_env.c @@ -142,10 +142,12 @@ CMS_EncryptedContentInfo *ossl_cms_get0_env_enc_content(const CMS_ContentInfo *c { switch (cms_get_enveloped_type(cms)) { case CMS_ENVELOPED_STANDARD: - return cms->d.envelopedData->encryptedContentInfo; + return cms->d.envelopedData == NULL ? NULL + : cms->d.envelopedData->encryptedContentInfo; case CMS_ENVELOPED_AUTH: - return cms->d.authEnvelopedData->authEncryptedContentInfo; + return cms->d.authEnvelopedData == NULL ? NULL + : cms->d.authEnvelopedData->authEncryptedContentInfo; default: return NULL; diff --git a/crypto/cms/cms_lib.c b/crypto/cms/cms_lib.c index cbe0370ad84..dfd1f44e062 100644 --- a/crypto/cms/cms_lib.c +++ b/crypto/cms/cms_lib.c @@ -75,6 +75,10 @@ CMS_ContentInfo *CMS_ContentInfo_new(void) void CMS_ContentInfo_free(CMS_ContentInfo *cms) { if (cms != NULL) { + CMS_EncryptedContentInfo *ec = ossl_cms_get0_env_enc_content(cms); + + if (ec != NULL) + OPENSSL_clear_free(ec->key, ec->keylen); OPENSSL_free(cms->ctx.propq); ASN1_item_free((ASN1_VALUE *)cms, ASN1_ITEM_rptr(CMS_ContentInfo)); }