ssl_cert_dup: Fix memory leak
Always use goto err on failure and call ssl_cert_free() on the error path so all fields and "ret" itself are freed Signed-off-by: Kurt Roeckx <kurt@roeckx.be> Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
6c42b39c95
commit
b3b966fb87
@ -315,7 +315,7 @@ CERT *ssl_cert_dup(CERT *cert)
|
|||||||
if (ret->pkeys[i].serverinfo == NULL)
|
if (ret->pkeys[i].serverinfo == NULL)
|
||||||
{
|
{
|
||||||
SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
|
SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
|
||||||
return NULL;
|
goto err;
|
||||||
}
|
}
|
||||||
ret->pkeys[i].serverinfo_length =
|
ret->pkeys[i].serverinfo_length =
|
||||||
cert->pkeys[i].serverinfo_length;
|
cert->pkeys[i].serverinfo_length;
|
||||||
@ -403,28 +403,8 @@ CERT *ssl_cert_dup(CERT *cert)
|
|||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
|
|
||||||
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_ECDH)
|
|
||||||
err:
|
err:
|
||||||
#endif
|
ssl_cert_free(ret);
|
||||||
#ifndef OPENSSL_NO_RSA
|
|
||||||
if (ret->rsa_tmp != NULL)
|
|
||||||
RSA_free(ret->rsa_tmp);
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_DH
|
|
||||||
if (ret->dh_tmp != NULL)
|
|
||||||
DH_free(ret->dh_tmp);
|
|
||||||
#endif
|
|
||||||
#ifndef OPENSSL_NO_ECDH
|
|
||||||
if (ret->ecdh_tmp != NULL)
|
|
||||||
EC_KEY_free(ret->ecdh_tmp);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_TLSEXT
|
|
||||||
custom_exts_free(&ret->cli_ext);
|
|
||||||
custom_exts_free(&ret->srv_ext);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ssl_cert_clear_certs(ret);
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user