Skip to content

Commit

Permalink
CMS_decrypt_set1_*(): fix NULL deref on unsuitable content type
Browse files Browse the repository at this point in the history
Fixes #19975
for CMS_decrypt_set1_pkey_and_peer() in the obvious way,
and a related potential crash in CMS_decrypt_set1_password().

The point is that the input might have an unexpected content type,
so a guard is needed at both places after `ec` is obtained.

Note that in CMS_decrypt_set1_pkey_and_peer() there was
no such ec != NULL guard for
```
    if (ris != NULL)
        debug = ec->debug;
```
maybe because it is implied here by ris != NULL.

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 #20209)
  • Loading branch information
DDvO committed Feb 24, 2023
1 parent 27d8739 commit ceb767b
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions crypto/cms/cms_smime.c
Expand Up @@ -708,11 +708,13 @@ int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk,
CMS_EncryptedContentInfo *ec = ossl_cms_get0_env_enc_content(cms);

/* Prevent mem leak on earlier CMS_decrypt_set1_{pkey_and_peer,password} */
OPENSSL_clear_free(ec->key, ec->keylen);
ec->key = NULL;
ec->keylen = 0;
if (ec != NULL) {
OPENSSL_clear_free(ec->key, ec->keylen);
ec->key = NULL;
ec->keylen = 0;
}

if (ris != NULL)
if (ris != NULL && ec != NULL)
debug = ec->debug;

cms_pkey_ri_type = ossl_cms_pkey_get_ri_type(pk);
Expand Down Expand Up @@ -826,9 +828,11 @@ int CMS_decrypt_set1_password(CMS_ContentInfo *cms,
CMS_EncryptedContentInfo *ec = ossl_cms_get0_env_enc_content(cms);

/* Prevent mem leak on earlier CMS_decrypt_set1_{pkey_and_peer,password} */
OPENSSL_clear_free(ec->key, ec->keylen);
ec->key = NULL;
ec->keylen = 0;
if (ec != NULL) {
OPENSSL_clear_free(ec->key, ec->keylen);
ec->key = NULL;
ec->keylen = 0;
}

for (i = 0; i < sk_CMS_RecipientInfo_num(ris); i++) {
ri = sk_CMS_RecipientInfo_value(ris, i);
Expand Down

0 comments on commit ceb767b

Please sign in to comment.