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
1 changed files with 2 additions and 22 deletions
|
@ -315,7 +315,7 @@ CERT *ssl_cert_dup(CERT *cert)
|
|||
if (ret->pkeys[i].serverinfo == NULL)
|
||||
{
|
||||
SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
goto err;
|
||||
}
|
||||
ret->pkeys[i].serverinfo_length =
|
||||
cert->pkeys[i].serverinfo_length;
|
||||
|
@ -403,28 +403,8 @@ CERT *ssl_cert_dup(CERT *cert)
|
|||
|
||||
return(ret);
|
||||
|
||||
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_ECDH)
|
||||
err:
|
||||
#endif
|
||||
#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);
|
||||
ssl_cert_free(ret);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue