]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
CMS_ContentInfo_free(): fix mem leak on encrypted content key
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>
Thu, 25 May 2023 15:46:48 +0000 (17:46 +0200)
committerDr. David von Oheimb <dev@ddvo.net>
Thu, 1 Jun 2023 07:59:06 +0000 (09:59 +0200)
Fixes #21026

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com>
(Merged from https://github.com/openssl/openssl/pull/21058)

(cherry picked from commit 7a1857483938b6b6eec5b8760c68c71a71296cd2)

crypto/cms/cms_env.c
crypto/cms/cms_lib.c

index 3105d37726a599eae2df9efb9f4c161c8c469323..bd1f3e7345d40054ffd77d161259cd8856f10989 100644 (file)
@@ -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;
index cbe0370ad840d92fdae0353b16eb1a4857d51fa9..dfd1f44e0620ffd756de297cb499d0db3bf69127 100644 (file)
@@ -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));
     }