[v3] examples/fips_validation: fix memory leak in sha test

Message ID b7ac7db51e01301b70899ae6dcff225952a7f37c.1656928437.git.gmuthukrishn@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: akhil goyal
Headers
Series [v3] examples/fips_validation: fix memory leak in sha test |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation warning apply issues
ci/iol-testing warning apply patch failure

Commit Message

Gowrishankar Muthukrishnan July 4, 2022, 9:55 a.m. UTC
  There is wrong size used for allocation of digest buffer which in
some cases cause memory corruption. Also, fixed places where memory
leak is observed. This fix would enable sha 384 and 512 NIST vectors
be supported fully.

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
v3:
 - addes fixes for suggestions in v2.
---
 doc/guides/sample_app_ug/fips_validation.rst   |  2 +-
 examples/fips_validation/fips_validation_sha.c | 11 +++++++++--
 examples/fips_validation/main.c                |  1 +
 3 files changed, 11 insertions(+), 3 deletions(-)
  

Comments

Akhil Goyal July 4, 2022, 10:34 a.m. UTC | #1
> Subject: [PATCH v3] examples/fips_validation: fix memory leak in sha test
> 
> There is wrong size used for allocation of digest buffer which in
> some cases cause memory corruption. Also, fixed places where memory
> leak is observed. This fix would enable sha 384 and 512 NIST vectors
> be supported fully.

Fixes: c9819d389b4b ("examples/fips_validation: add parsing for SHA")

++David/Thomas
> 
> Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
> ---
> v3:
>  - addes fixes for suggestions in v2.
> ---
>  doc/guides/sample_app_ug/fips_validation.rst   |  2 +-
>  examples/fips_validation/fips_validation_sha.c | 11 +++++++++--
>  examples/fips_validation/main.c                |  1 +
>  3 files changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/doc/guides/sample_app_ug/fips_validation.rst
> b/doc/guides/sample_app_ug/fips_validation.rst
> index 4b68226665..6f4bd34726 100644
> --- a/doc/guides/sample_app_ug/fips_validation.rst
> +++ b/doc/guides/sample_app_ug/fips_validation.rst
> @@ -63,7 +63,7 @@ ACVP
>      * AES-CMAC (128,192,256) - AFT
>      * AES-XTS (128,256) - AFT
>      * HMAC (SHA1, SHA224, SHA256, SHA384, SHA512)
> -    * SHA (1,256) - AFT, MCT
> +    * SHA (1, 256, 384, 512) - AFT, MCT
> 
> 
>  Application Information
> diff --git a/examples/fips_validation/fips_validation_sha.c
> b/examples/fips_validation/fips_validation_sha.c
> index a2928618d7..dff552586f 100644
> --- a/examples/fips_validation/fips_validation_sha.c
> +++ b/examples/fips_validation/fips_validation_sha.c
> @@ -229,13 +229,20 @@ parse_test_sha_json_algorithm(void)
>  	for (i = 0; i < RTE_DIM(phsc); i++) {
>  		if (info.interim_info.sha_data.algo == phsc[i].algo) {
>  			vec.cipher_auth.digest.len = atoi(phsc[i].str);
> -			vec.cipher_auth.digest.val = calloc(0,
> vec.cipher_auth.digest.len * 8);
> +			free(vec.cipher_auth.digest.val);
> +			vec.cipher_auth.digest.val = calloc(1,
> vec.cipher_auth.digest.len);
> +			if (vec.cipher_auth.digest.val == NULL)
> +				return -1;
> +
>  			break;
>  		}
>  	}
> 
> -	if (i == RTE_DIM(phsc))
> +	if (i == RTE_DIM(phsc)) {
> +		free(vec.cipher_auth.digest.val);
> +		vec.cipher_auth.digest.val = NULL;
>  		return -1;
> +	}
> 
>  	return 0;
>  }
> diff --git a/examples/fips_validation/main.c b/examples/fips_validation/main.c
> index 6d52048b5c..8bd5a66889 100644
> --- a/examples/fips_validation/main.c
> +++ b/examples/fips_validation/main.c
> @@ -2099,6 +2099,7 @@ fips_test_one_json_file(void)
>  		json_info.json_vector_set =
> json_array_get(json_info.json_root, vector_set_idx);
>  		fips_test_one_vector_set();
>  		json_array_append_new(json_info.json_write_root,
> json_info.json_write_set);
> +		json_incref(json_info.json_write_set);
>  	}
> 
>  	json_dumpf(json_info.json_write_root, info.fp_wr, JSON_INDENT(4));
> --
> 2.25.1
  
Akhil Goyal July 4, 2022, 5:32 p.m. UTC | #2
> Subject: RE: [PATCH v3] examples/fips_validation: fix memory leak in sha test
> 
> > Subject: [PATCH v3] examples/fips_validation: fix memory leak in sha test
> >
> > There is wrong size used for allocation of digest buffer which in
> > some cases cause memory corruption. Also, fixed places where memory
> > leak is observed. This fix would enable sha 384 and 512 NIST vectors
> > be supported fully.
> 
> Fixes: c9819d389b4b ("examples/fips_validation: add parsing for SHA")
> 
> ++David/Thomas
Squashed with original commit.

Thanks.
  

Patch

diff --git a/doc/guides/sample_app_ug/fips_validation.rst b/doc/guides/sample_app_ug/fips_validation.rst
index 4b68226665..6f4bd34726 100644
--- a/doc/guides/sample_app_ug/fips_validation.rst
+++ b/doc/guides/sample_app_ug/fips_validation.rst
@@ -63,7 +63,7 @@  ACVP
     * AES-CMAC (128,192,256) - AFT
     * AES-XTS (128,256) - AFT
     * HMAC (SHA1, SHA224, SHA256, SHA384, SHA512)
-    * SHA (1,256) - AFT, MCT
+    * SHA (1, 256, 384, 512) - AFT, MCT
 
 
 Application Information
diff --git a/examples/fips_validation/fips_validation_sha.c b/examples/fips_validation/fips_validation_sha.c
index a2928618d7..dff552586f 100644
--- a/examples/fips_validation/fips_validation_sha.c
+++ b/examples/fips_validation/fips_validation_sha.c
@@ -229,13 +229,20 @@  parse_test_sha_json_algorithm(void)
 	for (i = 0; i < RTE_DIM(phsc); i++) {
 		if (info.interim_info.sha_data.algo == phsc[i].algo) {
 			vec.cipher_auth.digest.len = atoi(phsc[i].str);
-			vec.cipher_auth.digest.val = calloc(0, vec.cipher_auth.digest.len * 8);
+			free(vec.cipher_auth.digest.val);
+			vec.cipher_auth.digest.val = calloc(1, vec.cipher_auth.digest.len);
+			if (vec.cipher_auth.digest.val == NULL)
+				return -1;
+
 			break;
 		}
 	}
 
-	if (i == RTE_DIM(phsc))
+	if (i == RTE_DIM(phsc)) {
+		free(vec.cipher_auth.digest.val);
+		vec.cipher_auth.digest.val = NULL;
 		return -1;
+	}
 
 	return 0;
 }
diff --git a/examples/fips_validation/main.c b/examples/fips_validation/main.c
index 6d52048b5c..8bd5a66889 100644
--- a/examples/fips_validation/main.c
+++ b/examples/fips_validation/main.c
@@ -2099,6 +2099,7 @@  fips_test_one_json_file(void)
 		json_info.json_vector_set = json_array_get(json_info.json_root, vector_set_idx);
 		fips_test_one_vector_set();
 		json_array_append_new(json_info.json_write_root, json_info.json_write_set);
+		json_incref(json_info.json_write_set);
 	}
 
 	json_dumpf(json_info.json_write_root, info.fp_wr, JSON_INDENT(4));