Re: [PATCH 1/7] crypto: fix a memory leak in sm2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hongbo,

On 5/12/21 10:04 PM, Hongbo Li wrote:
From: Hongbo Li <herberthbli@xxxxxxxxxxx>

SM2 module alloc ec->Q in sm2_set_pub_key(), when doing alg test in
test_akcipher_one(), it will set public key for every test vector,
and don't free ec->Q. This will cause a memory leak.

This patch alloc ec->Q in sm2_ec_ctx_init().

Signed-off-by: Hongbo Li <herberthbli@xxxxxxxxxxx>
---
  crypto/sm2.c | 24 ++++++++++--------------
  1 file changed, 10 insertions(+), 14 deletions(-)

diff --git a/crypto/sm2.c b/crypto/sm2.c
index b21addc..db8a4a2 100644
--- a/crypto/sm2.c
+++ b/crypto/sm2.c
@@ -79,10 +79,17 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec)
  		goto free;
rc = -ENOMEM;
+
+	ec->Q = mpi_point_new(0);
+	if (!ec->Q)
+		goto free;
+
  	/* mpi_ec_setup_elliptic_curve */
  	ec->G = mpi_point_new(0);
-	if (!ec->G)
+	if (!ec->G) {
+		mpi_point_release(ec->Q);
  		goto free;
+	}
mpi_set(ec->G->x, x);
  	mpi_set(ec->G->y, y);
@@ -91,6 +98,7 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec)
  	rc = -EINVAL;
  	ec->n = mpi_scanval(ecp->n);
  	if (!ec->n) {
+		mpi_point_release(ec->Q);
  		mpi_point_release(ec->G);
  		goto free;
  	}
@@ -386,27 +394,15 @@ static int sm2_set_pub_key(struct crypto_akcipher *tfm,
  	MPI a;
  	int rc;
- ec->Q = mpi_point_new(0);
-	if (!ec->Q)
-		return -ENOMEM;
-
  	/* include the uncompressed flag '0x04' */
-	rc = -ENOMEM;
  	a = mpi_read_raw_data(key, keylen);
  	if (!a)
-		goto error;
+		return -ENOMEM;
mpi_normalize(a);
  	rc = sm2_ecc_os2ec(ec->Q, a);
  	mpi_free(a);
-	if (rc)
-		goto error;
-
-	return 0;
-error:
-	mpi_point_release(ec->Q);
-	ec->Q = NULL;
  	return rc;
  }

Thanks a lot for fixing this issue.

Reviewed-by: Tianjia Zhang <tianjia.zhang@xxxxxxxxxxxxxxxxx>

Also added:

Cc: stable@xxxxxxxxxxxxxxx # v5.10+

Best regards,
Tianjia



[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]

  Powered by Linux