mirror of https://github.com/openssl/openssl.git
add checks for the return values of BN_new(), sk_RSA_PRIME_INFO_new_reserve(),
EVP_PKEY_CTX_new_from_pkey() and EVP_CIPHER_CTX_new(). Otherwise may result in memory errors. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/16892)
This commit is contained in:
parent
7220085f22
commit
9dddcd90a1
|
@ -85,6 +85,10 @@ CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms,
|
|||
goto merr;
|
||||
}
|
||||
ctx = EVP_CIPHER_CTX_new();
|
||||
if (ctx == NULL) {
|
||||
ERR_raise(ERR_LIB_CMS, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (EVP_EncryptInit_ex(ctx, kekciph, NULL, NULL, NULL) <= 0) {
|
||||
ERR_raise(ERR_LIB_CMS, ERR_R_EVP_LIB);
|
||||
|
|
|
@ -65,7 +65,8 @@ DSA_SIG *d2i_DSA_SIG(DSA_SIG **psig, const unsigned char **ppin, long len)
|
|||
sig->r = BN_new();
|
||||
if (sig->s == NULL)
|
||||
sig->s = BN_new();
|
||||
if (ossl_decode_der_dsa_sig(sig->r, sig->s, ppin, (size_t)len) == 0) {
|
||||
if (sig->r == NULL || sig->s == NULL
|
||||
|| ossl_decode_der_dsa_sig(sig->r, sig->s, ppin, (size_t)len) == 0) {
|
||||
if (psig == NULL || *psig == NULL)
|
||||
DSA_SIG_free(sig);
|
||||
return NULL;
|
||||
|
|
|
@ -1223,7 +1223,8 @@ ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **psig, const unsigned char **ppin, long len)
|
|||
sig->r = BN_new();
|
||||
if (sig->s == NULL)
|
||||
sig->s = BN_new();
|
||||
if (ossl_decode_der_dsa_sig(sig->r, sig->s, ppin, (size_t)len) == 0) {
|
||||
if (sig->r == NULL || sig->s == NULL
|
||||
|| ossl_decode_der_dsa_sig(sig->r, sig->s, ppin, (size_t)len) == 0) {
|
||||
if (psig == NULL || *psig == NULL)
|
||||
ECDSA_SIG_free(sig);
|
||||
return NULL;
|
||||
|
|
|
@ -1850,6 +1850,8 @@ void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx,
|
|||
if (tmp_keymgmt == NULL) {
|
||||
EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pk, propquery);
|
||||
|
||||
if (ctx == NULL)
|
||||
goto end;
|
||||
tmp_keymgmt = ctx->keymgmt;
|
||||
ctx->keymgmt = NULL;
|
||||
EVP_PKEY_CTX_free(ctx);
|
||||
|
|
|
@ -839,6 +839,11 @@ static void *do_PVK_body_key(const unsigned char **in,
|
|||
#endif
|
||||
EVP_CIPHER_CTX *cctx = EVP_CIPHER_CTX_new();
|
||||
|
||||
if (cctx == NULL) {
|
||||
ERR_raise(ERR_LIB_PEM, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (saltlen) {
|
||||
#ifndef OPENSSL_NO_RC4
|
||||
unsigned int magic;
|
||||
|
|
|
@ -392,6 +392,8 @@ RSA *ossl_rsa_dup(const RSA *rsa, int selection)
|
|||
if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0
|
||||
&& (pnum = sk_RSA_PRIME_INFO_num(rsa->prime_infos)) > 0) {
|
||||
dupkey->prime_infos = sk_RSA_PRIME_INFO_new_reserve(NULL, pnum);
|
||||
if (dupkey->prime_infos == NULL)
|
||||
goto err;
|
||||
for (i = 0; i < pnum; i++) {
|
||||
const RSA_PRIME_INFO *pinfo = NULL;
|
||||
RSA_PRIME_INFO *duppinfo = NULL;
|
||||
|
|
Loading…
Reference in New Issue