mirror of https://github.com/openssl/openssl.git
				
				
				
			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) | ||||
| 				{ | ||||
| 				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 New Issue