Download raw body.
[PATCH] Fix memory leaks related to ML-KEM
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)
[PATCH] Fix memory leaks related to ML-KEM