Index | Thread | Search

From:
Kenjiro Nakayama <nakayamakenjiro@gmail.com>
Subject:
[PATCH] Fix memory leaks related to ML-KEM
To:
tech@openbsd.org
Cc:
nakayamakenjiro@gmail.com
Date:
Tue, 17 Dec 2024 15:40:26 +0900

Download raw body.

Thread
This patch resolves memory leaks and ensures proper resource cleanup:

- Call CBB_cleanup() to avoid leaks after initializing CBB.
- Remove unnecessary "break" before MlkemKeygenFileTest in tests.
- Add missing fclose() calls to release file resources in tests.

Signed-off-by: Kenjiro Nakayama <nakayamakenjiro@gmail.com>
---
 src/lib/libcrypto/mlkem/mlkem1024.c                           | 1 +
 src/lib/libcrypto/mlkem/mlkem768.c                            | 1 +
 src/regress/lib/libcrypto/mlkem/mlkem1024_keygen_tests.c      | 2 +-
 src/regress/lib/libcrypto/mlkem/mlkem1024_nist_keygen_tests.c | 1 +
 src/regress/lib/libcrypto/mlkem/mlkem768_keygen_tests.c       | 2 +-
 src/regress/lib/libcrypto/mlkem/mlkem768_nist_keygen_tests.c  | 1 +
 6 files changed, 6 insertions(+), 2 deletions(-)

diff --git src/lib/libcrypto/mlkem/mlkem1024.c src/lib/libcrypto/mlkem/mlkem1024.c
index e0a71f335..813d84f88 100644
--- src/lib/libcrypto/mlkem/mlkem1024.c
+++ src/lib/libcrypto/mlkem/mlkem1024.c
@@ -878,6 +878,7 @@ MLKEM1024_generate_key_external_entropy(
 	if (!mlkem_marshal_public_key(&cbb, &priv->pub)) {
 		abort();
 	}
+	CBB_cleanup(&cbb);
 
 	hash_h(priv->pub.public_key_hash, out_encoded_public_key,
 	    MLKEM1024_PUBLIC_KEY_BYTES);
diff --git src/lib/libcrypto/mlkem/mlkem768.c src/lib/libcrypto/mlkem/mlkem768.c
index fed4704f8..7ab48fab6 100644
--- src/lib/libcrypto/mlkem/mlkem768.c
+++ src/lib/libcrypto/mlkem/mlkem768.c
@@ -877,6 +877,7 @@ MLKEM768_generate_key_external_entropy(
 	if (!mlkem_marshal_public_key(&cbb, &priv->pub)) {
 		abort();
 	}
+	CBB_cleanup(&cbb);
 
 	hash_h(priv->pub.public_key_hash, out_encoded_public_key,
 	    MLKEM768_PUBLIC_KEY_BYTES);
diff --git src/regress/lib/libcrypto/mlkem/mlkem1024_keygen_tests.c src/regress/lib/libcrypto/mlkem/mlkem1024_keygen_tests.c
index d27d5aacf..e1a00c5b8 100644
--- src/regress/lib/libcrypto/mlkem/mlkem1024_keygen_tests.c
+++ src/regress/lib/libcrypto/mlkem/mlkem1024_keygen_tests.c
@@ -112,7 +112,6 @@ main(int argc, char **argv)
 				break;
 			grab_data(&private_key, buf, strlen("private_key: "));
 			state = S_START;
-			break;
 
 			MlkemKeygenFileTest(&seed, &public_key, &private_key);
 			free((void *)CBS_data(&seed));
@@ -126,5 +125,6 @@ main(int argc, char **argv)
 	}
 
 	free(buf);
+	fclose(fp);
 	exit(failure);
 }
diff --git src/regress/lib/libcrypto/mlkem/mlkem1024_nist_keygen_tests.c src/regress/lib/libcrypto/mlkem/mlkem1024_nist_keygen_tests.c
index b9600dc6b..effa1f734 100644
--- src/regress/lib/libcrypto/mlkem/mlkem1024_nist_keygen_tests.c
+++ src/regress/lib/libcrypto/mlkem/mlkem1024_nist_keygen_tests.c
@@ -133,5 +133,6 @@ main(int argc, char **argv)
 	}
 
 	free(buf);
+	fclose(fp);
 	exit(failure);
 }
diff --git src/regress/lib/libcrypto/mlkem/mlkem768_keygen_tests.c src/regress/lib/libcrypto/mlkem/mlkem768_keygen_tests.c
index b54b8c53c..f00d009fa 100644
--- src/regress/lib/libcrypto/mlkem/mlkem768_keygen_tests.c
+++ src/regress/lib/libcrypto/mlkem/mlkem768_keygen_tests.c
@@ -112,7 +112,6 @@ main(int argc, char **argv)
 				break;
 			grab_data(&private_key, buf, strlen("private_key: "));
 			state = S_START;
-			break;
 
 			MlkemKeygenFileTest(&seed, &public_key, &private_key);
 			free((void *)CBS_data(&seed));
@@ -126,5 +125,6 @@ main(int argc, char **argv)
 	}
 
 	free(buf);
+	fclose(fp);
 	exit(failure);
 }
diff --git src/regress/lib/libcrypto/mlkem/mlkem768_nist_keygen_tests.c src/regress/lib/libcrypto/mlkem/mlkem768_nist_keygen_tests.c
index ee71aa262..8b87afefc 100644
--- src/regress/lib/libcrypto/mlkem/mlkem768_nist_keygen_tests.c
+++ src/regress/lib/libcrypto/mlkem/mlkem768_nist_keygen_tests.c
@@ -133,5 +133,6 @@ main(int argc, char **argv)
 	}
 
 	free(buf);
+	fclose(fp);
 	exit(failure);
 }
-- 
2.39.5 (Apple Git-154)