From 5cc80692b8397d8b87fd69d0f0165a6156534f0b Mon Sep 17 00:00:00 2001 From: George Kadianakis Date: Tue, 29 Aug 2017 18:29:05 +0300 Subject: 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(+) (limited to 'src/or/hs_client.c') diff --git a/src/or/hs_client.c b/src/or/hs_client.c index 19359d260e..77fbf548ed 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; } -- cgit v1.2.3-54-g00ecf