mirror of https://github.com/openssl/openssl.git
				
				
				
			Fix dh dupctx refcount error
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16495)
(cherry picked from commit 21a0d9f3ed)
			
			
This commit is contained in:
		
							parent
							
								
									9d924c4fd4
								
							
						
					
					
						commit
						f161e0ace0
					
				|  | @ -238,7 +238,6 @@ static int dh_derive(void *vpdhctx, unsigned char *secret, | |||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static void dh_freectx(void *vpdhctx) | ||||
| { | ||||
|     PROV_DH_CTX *pdhctx = (PROV_DH_CTX *)vpdhctx; | ||||
|  | @ -271,12 +270,12 @@ static void *dh_dupctx(void *vpdhctx) | |||
|     dstctx->kdf_ukm = NULL; | ||||
|     dstctx->kdf_cekalg = NULL; | ||||
| 
 | ||||
|     if (dstctx->dh != NULL && !DH_up_ref(srcctx->dh)) | ||||
|     if (srcctx->dh != NULL && !DH_up_ref(srcctx->dh)) | ||||
|         goto err; | ||||
|     else | ||||
|         dstctx->dh = srcctx->dh; | ||||
| 
 | ||||
|     if (dstctx->dhpeer != NULL && !DH_up_ref(srcctx->dhpeer)) | ||||
|     if (srcctx->dhpeer != NULL && !DH_up_ref(srcctx->dhpeer)) | ||||
|         goto err; | ||||
|     else | ||||
|         dstctx->dhpeer = srcctx->dhpeer; | ||||
|  |  | |||
|  | @ -1848,11 +1848,17 @@ static int pderive_test_parse(EVP_TEST *t, | |||
| 
 | ||||
| static int pderive_test_run(EVP_TEST *t) | ||||
| { | ||||
|     EVP_PKEY_CTX *dctx = NULL; | ||||
|     PKEY_DATA *expected = t->data; | ||||
|     unsigned char *got = NULL; | ||||
|     size_t got_len; | ||||
| 
 | ||||
|     if (EVP_PKEY_derive(expected->ctx, NULL, &got_len) <= 0) { | ||||
|     if (!TEST_ptr(dctx = EVP_PKEY_CTX_dup(expected->ctx))) { | ||||
|         t->err = "DERIVE_ERROR"; | ||||
|         goto err; | ||||
|     } | ||||
| 
 | ||||
|     if (EVP_PKEY_derive(dctx, NULL, &got_len) <= 0) { | ||||
|         t->err = "DERIVE_ERROR"; | ||||
|         goto err; | ||||
|     } | ||||
|  | @ -1860,7 +1866,7 @@ static int pderive_test_run(EVP_TEST *t) | |||
|         t->err = "DERIVE_ERROR"; | ||||
|         goto err; | ||||
|     } | ||||
|     if (EVP_PKEY_derive(expected->ctx, got, &got_len) <= 0) { | ||||
|     if (EVP_PKEY_derive(dctx, got, &got_len) <= 0) { | ||||
|         t->err = "DERIVE_ERROR"; | ||||
|         goto err; | ||||
|     } | ||||
|  | @ -1872,6 +1878,7 @@ static int pderive_test_run(EVP_TEST *t) | |||
|     t->err = NULL; | ||||
|  err: | ||||
|     OPENSSL_free(got); | ||||
|     EVP_PKEY_CTX_free(dctx); | ||||
|     return 1; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue