Messages in this thread | | | Subject | Re: [PATCH 1/7] crypto: fix a memory leak in sm2 | From | Tianjia Zhang <> | Date | Fri, 14 May 2021 12:52:29 +0800 |
| |
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
| |