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
Tianjia Zhang tianjia.zhang@linux.alibaba.com 于2021年5月14日周五 下午12:52写道:
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) {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@linux.alibaba.com
Also added:
Cc: stable@vger.kernel.org # v5.10+
Best regards, Tianjia
Thank you for your review! Regards, Hongbo
linux-stable-mirror@lists.linaro.org