mirror of https://github.com/openssl/openssl.git
Fix a possible memory leak in dane_tlsa_add
Several error cases leak either the X509 object
or the pkey or the danetls_record object.
Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22743)
(cherry picked from commit e4a94bcc77)
This commit is contained in:
parent
667f974ba7
commit
7f943d40bd
|
|
@ -327,11 +327,13 @@ static int dane_tlsa_add(SSL_DANE *dane,
|
|||
case DANETLS_SELECTOR_CERT:
|
||||
if (!d2i_X509(&cert, &p, ilen) || p < data ||
|
||||
dlen != (size_t)(p - data)) {
|
||||
X509_free(cert);
|
||||
tlsa_free(t);
|
||||
ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
|
||||
return 0;
|
||||
}
|
||||
if (X509_get0_pubkey(cert) == NULL) {
|
||||
X509_free(cert);
|
||||
tlsa_free(t);
|
||||
ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
|
||||
return 0;
|
||||
|
|
@ -339,6 +341,7 @@ static int dane_tlsa_add(SSL_DANE *dane,
|
|||
|
||||
if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
|
||||
X509_free(cert);
|
||||
tlsa_free(t);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -362,6 +365,7 @@ static int dane_tlsa_add(SSL_DANE *dane,
|
|||
case DANETLS_SELECTOR_SPKI:
|
||||
if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
|
||||
dlen != (size_t)(p - data)) {
|
||||
EVP_PKEY_free(pkey);
|
||||
tlsa_free(t);
|
||||
ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue