[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor/master] prop224: Fix memleak in client_get_random_intro().



commit 5cc80692b8397d8b87fd69d0f0165a6156534f0b
Author: George Kadianakis <desnacked@xxxxxxxxxx>
Date:   Tue Aug 29 18:29:05 2017 +0300

    prop224: Fix memleak in client_get_random_intro().
    
    The memleak was occuring because of the way ExcludeNodes is handled in
    that function. Basically, we were putting excluded intro points extend
    infos in a special variable which was never freed. Also, if there were
    multiple excluded intro points then that variable was overwritten
    everytime leaking more memory. This commit should fix both issues.
---
 src/or/hs_client.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/or/hs_client.c b/src/or/hs_client.c
index 19359d260..77fbf548e 100644
--- a/src/or/hs_client.c
+++ b/src/or/hs_client.c
@@ -646,6 +646,12 @@ client_get_random_intro(const ed25519_public_key_t *service_pk)
       /* If this pick is in the ExcludeNodes list, we keep its reference so if
        * we ever end up not being able to pick anything else and StrictNodes is
        * unset, we'll use it. */
+      if (ei_excluded) {
+        /* If something was already here free it. After the loop is gone we
+         * will examine the last excluded intro point, and that's fine since
+         * that's random anyway */
+        extend_info_free(ei_excluded);
+      }
       ei_excluded = ei;
       continue;
     }
@@ -662,6 +668,7 @@ client_get_random_intro(const ed25519_public_key_t *service_pk)
   if (options->StrictNodes) {
     log_warn(LD_REND, "Every introduction points are in the ExcludeNodes set "
              "and StrictNodes is set. We can't connect.");
+    extend_info_free(ei);
     ei = NULL;
   }
 



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits