From cd4075d54058eb0749880acac9f3d8af2c47b9ba Mon Sep 17 00:00:00 2001
From: tb <>
Date: Tue, 17 Dec 2024 07:13:47 +0000
Subject: Plug two memory leaks in MLKEM*_generate_key_external_entropy()

This needs more thinking. These are void functions that allocate...
Left an XXX for now.

From Kenjiro Nakayama
---
 src/lib/libcrypto/mlkem/mlkem1024.c | 4 +++-
 src/lib/libcrypto/mlkem/mlkem768.c  | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/lib/libcrypto/mlkem/mlkem1024.c b/src/lib/libcrypto/mlkem/mlkem1024.c
index e0a71f335b..a6256ece83 100644
--- a/src/lib/libcrypto/mlkem/mlkem1024.c
+++ b/src/lib/libcrypto/mlkem/mlkem1024.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mlkem1024.c,v 1.1 2024/12/13 00:17:17 beck Exp $ */
+/* $OpenBSD: mlkem1024.c,v 1.2 2024/12/17 07:13:47 tb Exp $ */
 /*
  * Copyright (c) 2024, Google Inc.
  * Copyright (c) 2024, Bob Beck <beck@obtuse.com>
@@ -874,10 +874,12 @@ MLKEM1024_generate_key_external_entropy(
 	matrix_mult_transpose(&priv->pub.t, &priv->pub.m, &priv->s);
 	vector_add(&priv->pub.t, &error);
 
+	/* XXX - error checking. */
 	CBB_init_fixed(&cbb, out_encoded_public_key, MLKEM1024_PUBLIC_KEY_BYTES);
 	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 a/src/lib/libcrypto/mlkem/mlkem768.c b/src/lib/libcrypto/mlkem/mlkem768.c
index fed4704f87..daa026e2a3 100644
--- a/src/lib/libcrypto/mlkem/mlkem768.c
+++ b/src/lib/libcrypto/mlkem/mlkem768.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mlkem768.c,v 1.2 2024/12/13 00:09:02 beck Exp $ */
+/* $OpenBSD: mlkem768.c,v 1.3 2024/12/17 07:13:47 tb Exp $ */
 /*
  * Copyright (c) 2024, Google Inc.
  * Copyright (c) 2024, Bob Beck <beck@obtuse.com>
@@ -873,10 +873,12 @@ MLKEM768_generate_key_external_entropy(
 	matrix_mult_transpose(&priv->pub.t, &priv->pub.m, &priv->s);
 	vector_add(&priv->pub.t, &error);
 
+	/* XXX - error checking */
 	CBB_init_fixed(&cbb, out_encoded_public_key, MLKEM768_PUBLIC_KEY_BYTES);
 	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);
-- 
cgit v1.2.3-55-g6feb