gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r33075 - gnunet/src/secretsharing


From: gnunet
Subject: [GNUnet-SVN] r33075 - gnunet/src/secretsharing
Date: Tue, 15 Apr 2014 01:29:44 +0200

Author: dold
Date: 2014-04-15 01:29:44 +0200 (Tue, 15 Apr 2014)
New Revision: 33075

Modified:
   gnunet/src/secretsharing/gnunet-secretsharing-profiler.c
   gnunet/src/secretsharing/gnunet-service-secretsharing.c
Log:
fix lots of memory leaks in secretsharing decryption

Modified: gnunet/src/secretsharing/gnunet-secretsharing-profiler.c
===================================================================
--- gnunet/src/secretsharing/gnunet-secretsharing-profiler.c    2014-04-14 
23:07:14 UTC (rev 33074)
+++ gnunet/src/secretsharing/gnunet-secretsharing-profiler.c    2014-04-14 
23:29:44 UTC (rev 33075)
@@ -294,7 +294,7 @@
     *dh = NULL;
   }
 
-  GNUNET_assert (NULL == connect_ops[n]);
+  GNUNET_assert (NULL != connect_ops[n]);
   connect_ops[n] = NULL;
 }
 
@@ -493,7 +493,10 @@
     unsigned int i;
     for (i = 0; i < num_peers; i++)
       if (NULL != connect_ops[i])
+      {
+        // the disconnect callback will set the op to NULL
         GNUNET_TESTBED_operation_done (connect_ops[i]);
+      }
     GNUNET_free (connect_ops);
   }
 

Modified: gnunet/src/secretsharing/gnunet-service-secretsharing.c
===================================================================
--- gnunet/src/secretsharing/gnunet-service-secretsharing.c     2014-04-14 
23:07:14 UTC (rev 33074)
+++ gnunet/src/secretsharing/gnunet-service-secretsharing.c     2014-04-14 
23:29:44 UTC (rev 33075)
@@ -558,6 +558,27 @@
     ds->consensus = NULL;
   }
 
+  if (NULL != ds->info)
+  {
+    unsigned int i;
+    for (i = 0; i < ds->share->num_peers; i++)
+    {
+      if (NULL != ds->info[i].partial_decryption)
+      {
+        gcry_mpi_release (ds->info[i].partial_decryption);
+        ds->info[i].partial_decryption = NULL;
+      }
+    }
+    GNUNET_free (ds->info);
+    ds->info = NULL;
+  }
+
+  if (NULL != ds->share)
+  {
+    GNUNET_SECRETSHARING_share_destroy (ds->share);
+    ds->share = NULL;
+  }
+
   if (NULL != ds->client_mq)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "destroying decrypt MQ\n");
@@ -1429,6 +1450,14 @@
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "sent decrypt done to client\n");
 
+  GNUNET_free (indices);
+
+  gcry_mpi_release(lagrange);
+  gcry_mpi_release(m);
+  gcry_mpi_release(tmp);
+  gcry_mpi_release(prod);
+  gcry_mpi_release(c_2);
+
   // FIXME: what if not enough peers participated?
 }
 
@@ -1568,7 +1597,7 @@
                 session->share->my_peer, info - session->info, tmp1_str, 
tmp2_str);
     GNUNET_free (tmp1_str);
     GNUNET_free (tmp2_str);
-    // return;
+    goto cleanup;
   }
 
 
@@ -1582,12 +1611,22 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "P%u: Received invalid partial 
decryption from P%u (eqn 2)\n",
                 session->share->my_peer, info - session->info);
-    // return;
+    goto cleanup;
   }
 
 
   GNUNET_CRYPTO_mpi_scan_unsigned (&info->partial_decryption, 
&d->partial_decryption,
                                    GNUNET_SECRETSHARING_ELGAMAL_BITS / 8);
+cleanup:
+  gcry_mpi_release (tmp1);
+  gcry_mpi_release (tmp2);
+  gcry_mpi_release (sigma);
+  gcry_mpi_release (commit1);
+  gcry_mpi_release (commit2);
+  gcry_mpi_release (r);
+  gcry_mpi_release (w);
+  gcry_mpi_release (challenge);
+  gcry_mpi_release (c1);
 }
 
 
@@ -1691,6 +1730,14 @@
   GNUNET_CONSENSUS_insert (ds->consensus, &element, NULL, NULL);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: Inserting decrypt element 
done!\n",
               ds->share->my_peer);
+
+  gcry_mpi_release (s);
+  gcry_mpi_release (w);
+  gcry_mpi_release (c1);
+  gcry_mpi_release (beta);
+  gcry_mpi_release (tmp);
+  gcry_mpi_release (challenge);
+  gcry_mpi_release (sigma);
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]