Message ID | 1620828254-25545-2-git-send-email-herbert.tencent@gmail.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Herbert Xu |
Headers | show |
Series | crypto: add eddsa support for x509 | expand |
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
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
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; }