summaryrefslogtreecommitdiff
path: root/mpi
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2016-02-10 17:35:43 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2016-02-10 17:35:43 +0900
commitb12dd550fd6af687ef95c584d0d8366c34965cc8 (patch)
tree15a3f531774227775a9c07dbe9a5ae4a64d1d102 /mpi
parent4a19b195697e0b6534d28de9401ae3e9d86adb42 (diff)
downloadlibgcrypt-b12dd550fd6af687ef95c584d0d8366c34965cc8.tar.gz
ecc: Fix memory leaks on error.
* cipher/ecc.c (ecc_decrypt_raw): Go to leave to release memory. * mpi/ec.c (_gcry_mpi_ec_curve_point): Likewise. -- Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'mpi')
-rw-r--r--mpi/ec.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/mpi/ec.c b/mpi/ec.c
index 346e5f1e..f0b83743 100644
--- a/mpi/ec.c
+++ b/mpi/ec.c
@@ -1478,10 +1478,12 @@ _gcry_mpi_ec_curve_point (gcry_mpi_point_t point, mpi_ec_t ctx)
{
case MPI_EC_WEIERSTRASS:
{
- gcry_mpi_t xxx = mpi_new (0);
+ gcry_mpi_t xxx;
if (_gcry_mpi_ec_get_affine (x, y, point, ctx))
- return 0;
+ goto leave;
+
+ xxx = mpi_new (0);
/* y^2 == x^3 + a·x + b */
ec_pow2 (y, y, ctx);
@@ -1502,7 +1504,7 @@ _gcry_mpi_ec_curve_point (gcry_mpi_point_t point, mpi_ec_t ctx)
#define xx y
/* With Montgomery curve, only X-coordinate is valid. */
if (_gcry_mpi_ec_get_affine (x, NULL, point, ctx))
- return 0;
+ goto leave;
/* The equation is: b * y^2 == x^3 + a · x^2 + x */
/* We check if right hand is quadratic residue or not by
@@ -1530,7 +1532,7 @@ _gcry_mpi_ec_curve_point (gcry_mpi_point_t point, mpi_ec_t ctx)
case MPI_EC_EDWARDS:
{
if (_gcry_mpi_ec_get_affine (x, y, point, ctx))
- return 0;
+ goto leave;
/* a · x^2 + y^2 - 1 - b · x^2 · y^2 == 0 */
ec_pow2 (x, x, ctx);
@@ -1553,6 +1555,7 @@ _gcry_mpi_ec_curve_point (gcry_mpi_point_t point, mpi_ec_t ctx)
break;
}
+ leave:
_gcry_mpi_release (w);
_gcry_mpi_release (x);
_gcry_mpi_release (y);