From: Kenjiro Nakayama 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 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 --- 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)