diff options
author | Florian Dold <florian.dold@gmail.com> | 2014-04-14 23:29:44 +0000 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2014-04-14 23:29:44 +0000 |
commit | 3401695f0825a3b64092a6983242a4f995a03ab3 (patch) | |
tree | 79e5f7b9d507a31f4c3f56e5f5c57bf5e5085afd /src/secretsharing | |
parent | b6cc69953e7669e31db2a194d11ae134e8dfb86d (diff) | |
download | gnunet-3401695f0825a3b64092a6983242a4f995a03ab3.tar.gz gnunet-3401695f0825a3b64092a6983242a4f995a03ab3.zip |
fix lots of memory leaks in secretsharing decryption
Diffstat (limited to 'src/secretsharing')
-rw-r--r-- | src/secretsharing/gnunet-secretsharing-profiler.c | 5 | ||||
-rw-r--r-- | src/secretsharing/gnunet-service-secretsharing.c | 51 |
2 files changed, 53 insertions, 3 deletions
diff --git a/src/secretsharing/gnunet-secretsharing-profiler.c b/src/secretsharing/gnunet-secretsharing-profiler.c index 5dc649178..79fa339cf 100644 --- a/src/secretsharing/gnunet-secretsharing-profiler.c +++ b/src/secretsharing/gnunet-secretsharing-profiler.c | |||
@@ -294,7 +294,7 @@ decrypt_disconnect_adapter(void *cls, void *op_result) | |||
294 | *dh = NULL; | 294 | *dh = NULL; |
295 | } | 295 | } |
296 | 296 | ||
297 | GNUNET_assert (NULL == connect_ops[n]); | 297 | GNUNET_assert (NULL != connect_ops[n]); |
298 | connect_ops[n] = NULL; | 298 | connect_ops[n] = NULL; |
299 | } | 299 | } |
300 | 300 | ||
@@ -493,7 +493,10 @@ handle_shutdown (void *cls, | |||
493 | unsigned int i; | 493 | unsigned int i; |
494 | for (i = 0; i < num_peers; i++) | 494 | for (i = 0; i < num_peers; i++) |
495 | if (NULL != connect_ops[i]) | 495 | if (NULL != connect_ops[i]) |
496 | { | ||
497 | // the disconnect callback will set the op to NULL | ||
496 | GNUNET_TESTBED_operation_done (connect_ops[i]); | 498 | GNUNET_TESTBED_operation_done (connect_ops[i]); |
499 | } | ||
497 | GNUNET_free (connect_ops); | 500 | GNUNET_free (connect_ops); |
498 | } | 501 | } |
499 | 502 | ||
diff --git a/src/secretsharing/gnunet-service-secretsharing.c b/src/secretsharing/gnunet-service-secretsharing.c index f169a1655..1e19df5ff 100644 --- a/src/secretsharing/gnunet-service-secretsharing.c +++ b/src/secretsharing/gnunet-service-secretsharing.c | |||
@@ -558,6 +558,27 @@ decrypt_session_destroy (struct DecryptSession *ds) | |||
558 | ds->consensus = NULL; | 558 | ds->consensus = NULL; |
559 | } | 559 | } |
560 | 560 | ||
561 | if (NULL != ds->info) | ||
562 | { | ||
563 | unsigned int i; | ||
564 | for (i = 0; i < ds->share->num_peers; i++) | ||
565 | { | ||
566 | if (NULL != ds->info[i].partial_decryption) | ||
567 | { | ||
568 | gcry_mpi_release (ds->info[i].partial_decryption); | ||
569 | ds->info[i].partial_decryption = NULL; | ||
570 | } | ||
571 | } | ||
572 | GNUNET_free (ds->info); | ||
573 | ds->info = NULL; | ||
574 | } | ||
575 | |||
576 | if (NULL != ds->share) | ||
577 | { | ||
578 | GNUNET_SECRETSHARING_share_destroy (ds->share); | ||
579 | ds->share = NULL; | ||
580 | } | ||
581 | |||
561 | if (NULL != ds->client_mq) | 582 | if (NULL != ds->client_mq) |
562 | { | 583 | { |
563 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "destroying decrypt MQ\n"); | 584 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "destroying decrypt MQ\n"); |
@@ -1429,6 +1450,14 @@ decrypt_conclude (void *cls) | |||
1429 | 1450 | ||
1430 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "sent decrypt done to client\n"); | 1451 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "sent decrypt done to client\n"); |
1431 | 1452 | ||
1453 | GNUNET_free (indices); | ||
1454 | |||
1455 | gcry_mpi_release(lagrange); | ||
1456 | gcry_mpi_release(m); | ||
1457 | gcry_mpi_release(tmp); | ||
1458 | gcry_mpi_release(prod); | ||
1459 | gcry_mpi_release(c_2); | ||
1460 | |||
1432 | // FIXME: what if not enough peers participated? | 1461 | // FIXME: what if not enough peers participated? |
1433 | } | 1462 | } |
1434 | 1463 | ||
@@ -1568,7 +1597,7 @@ decrypt_new_element (void *cls, | |||
1568 | session->share->my_peer, info - session->info, tmp1_str, tmp2_str); | 1597 | session->share->my_peer, info - session->info, tmp1_str, tmp2_str); |
1569 | GNUNET_free (tmp1_str); | 1598 | GNUNET_free (tmp1_str); |
1570 | GNUNET_free (tmp2_str); | 1599 | GNUNET_free (tmp2_str); |
1571 | // return; | 1600 | goto cleanup; |
1572 | } | 1601 | } |
1573 | 1602 | ||
1574 | 1603 | ||
@@ -1582,12 +1611,22 @@ decrypt_new_element (void *cls, | |||
1582 | { | 1611 | { |
1583 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "P%u: Received invalid partial decryption from P%u (eqn 2)\n", | 1612 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "P%u: Received invalid partial decryption from P%u (eqn 2)\n", |
1584 | session->share->my_peer, info - session->info); | 1613 | session->share->my_peer, info - session->info); |
1585 | // return; | 1614 | goto cleanup; |
1586 | } | 1615 | } |
1587 | 1616 | ||
1588 | 1617 | ||
1589 | GNUNET_CRYPTO_mpi_scan_unsigned (&info->partial_decryption, &d->partial_decryption, | 1618 | GNUNET_CRYPTO_mpi_scan_unsigned (&info->partial_decryption, &d->partial_decryption, |
1590 | GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); | 1619 | GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); |
1620 | cleanup: | ||
1621 | gcry_mpi_release (tmp1); | ||
1622 | gcry_mpi_release (tmp2); | ||
1623 | gcry_mpi_release (sigma); | ||
1624 | gcry_mpi_release (commit1); | ||
1625 | gcry_mpi_release (commit2); | ||
1626 | gcry_mpi_release (r); | ||
1627 | gcry_mpi_release (w); | ||
1628 | gcry_mpi_release (challenge); | ||
1629 | gcry_mpi_release (c1); | ||
1591 | } | 1630 | } |
1592 | 1631 | ||
1593 | 1632 | ||
@@ -1691,6 +1730,14 @@ insert_decrypt_element (struct DecryptSession *ds) | |||
1691 | GNUNET_CONSENSUS_insert (ds->consensus, &element, NULL, NULL); | 1730 | GNUNET_CONSENSUS_insert (ds->consensus, &element, NULL, NULL); |
1692 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: Inserting decrypt element done!\n", | 1731 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: Inserting decrypt element done!\n", |
1693 | ds->share->my_peer); | 1732 | ds->share->my_peer); |
1733 | |||
1734 | gcry_mpi_release (s); | ||
1735 | gcry_mpi_release (w); | ||
1736 | gcry_mpi_release (c1); | ||
1737 | gcry_mpi_release (beta); | ||
1738 | gcry_mpi_release (tmp); | ||
1739 | gcry_mpi_release (challenge); | ||
1740 | gcry_mpi_release (sigma); | ||
1694 | } | 1741 | } |
1695 | 1742 | ||
1696 | 1743 | ||