Hi Hongbo,
On 5/12/21 10:04 PM, Hongbo Li wrote:
From: Hongbo Li herberthbli@tencent.com
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@tencent.com
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) {
goto free;mpi_point_release(ec->Q);
- }
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->G); goto free; }mpi_point_release(ec->Q);
@@ -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@linux.alibaba.com
Also added:
Cc: stable@vger.kernel.org # v5.10+
Best regards, Tianjia