ecc: Fix some memory leaks
authorChristian Grothoff <christian@grothoff.org>
Mon, 11 Nov 2013 15:04:30 +0000 (16:04 +0100)
committerWerner Koch <wk@gnupg.org>
Wed, 13 Nov 2013 08:46:32 +0000 (09:46 +0100)
* cipher/ecc-curves.c (_gcry_mpi_ec_new): Free ec->b before assigning.
* cipher/ecc.c (nist_generate_key): Release Q.
* cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Ditto.
--

_gcry_mpi_ec_new: Fixing memory leak detected with valgrind; if 'b' is
non-NULL, the code in ec_p_init (ec.c:379) already makes a copy of
'b', so before we clobber ctx->b here, we need to at least release the
old value (however, it would of course be nicer to not first make a
copy of b in the first place, but this is the most localized change to
get rid of the memory leak).

nist_generate_key: Fixing rather obvious local leak; Q is first
initialized, then used, copied into the result but never released.

cipher/ecc-curves.c
cipher/ecc-eddsa.c
cipher/ecc.c

index 8c63f6c..5815e55 100644 (file)
@@ -867,6 +867,7 @@ _gcry_mpi_ec_new (gcry_ctx_t *r_ctx,
 
       if (b)
         {
+          mpi_free (ec->b);
           ec->b = b;
           b = NULL;
         }
index b9e866d..92c0713 100644 (file)
@@ -432,6 +432,7 @@ _gcry_ecc_eddsa_genkey (ECC_secret_key *sk, elliptic_curve_t *E, mpi_ec_t ctx,
   point_set (&sk->Q, &Q);
 
  leave:
+  point_free (&Q);
   gcry_mpi_release (a);
   gcry_mpi_release (x);
   gcry_mpi_release (y);
index b9af185..9135b68 100644 (file)
@@ -217,6 +217,7 @@ nist_generate_key (ECC_secret_key *sk, elliptic_curve_t *E, mpi_ec_t ctx,
       mpi_free (x);
   }
 
+  point_free (&Q);
   /* Now we can test our keys (this should never fail!).  */
   test_keys (sk, nbits - 64);