mirror of https://github.com/openssl/openssl.git
				
				
				
			Fix a mem leak in evp_pkey_copy_downgraded()
If we get a failure during evp_pkey_copy_downgraded() and on entry *dest was NULL then we leak the EVP_PKEY that was automatically allocated and stored in *dest. Found due to this comment: https://github.com/openssl/openssl/pull/18355#issuecomment-1145028315 Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com> (Merged from https://github.com/openssl/openssl/pull/18470)
This commit is contained in:
		
							parent
							
								
									4c149cf9f6
								
							
						
					
					
						commit
						ae4d9573ac
					
				|  | @ -1973,6 +1973,8 @@ void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx, | |||
| #ifndef FIPS_MODULE | ||||
| int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src) | ||||
| { | ||||
|     EVP_PKEY *allocpkey = NULL; | ||||
| 
 | ||||
|     if (!ossl_assert(dest != NULL)) | ||||
|         return 0; | ||||
| 
 | ||||
|  | @ -2003,7 +2005,7 @@ int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src) | |||
| 
 | ||||
|         /* Make sure we have a clean slate to copy into */ | ||||
|         if (*dest == NULL) { | ||||
|             *dest = EVP_PKEY_new(); | ||||
|             allocpkey = *dest = EVP_PKEY_new(); | ||||
|             if (*dest == NULL) { | ||||
|                 ERR_raise(ERR_LIB_EVP, ERR_R_MALLOC_FAILURE); | ||||
|                 return 0; | ||||
|  | @ -2052,6 +2054,10 @@ int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src) | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (allocpkey != NULL) { | ||||
|         EVP_PKEY_free(allocpkey); | ||||
|         *dest = NULL; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue