aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Færøy <ahf@torproject.org>2018-06-23 03:40:32 +0200
committerAlexander Færøy <ahf@torproject.org>2018-06-23 03:40:32 +0200
commitce5d055ed7e4d8e5d1c0b0b922738c87b6a8da1c (patch)
tree240b2b139e1a3b89e0d50ac03a59970124a1dfa8
parent6107a2127bf33059fb27fe0a57f24f1b21ef51aa (diff)
downloadtor-ce5d055ed7e4d8e5d1c0b0b922738c87b6a8da1c.tar.gz
tor-ce5d055ed7e4d8e5d1c0b0b922738c87b6a8da1c.zip
Fix memory leak in pick_hsdir_v3().
This patch fixes a memory leak in pick_hsdir_v3() where we might return early, but forgot to free the responsible_hsdirs variable. We solve this by not allocating storage for responsible_hsdirs until it's actually needed. See: Coverity CID 1437449
-rw-r--r--src/or/hs_client.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/or/hs_client.c b/src/or/hs_client.c
index 551cf50554..4e2824c13d 100644
--- a/src/or/hs_client.c
+++ b/src/or/hs_client.c
@@ -365,14 +365,12 @@ pick_hsdir_v3(const ed25519_public_key_t *onion_identity_pk)
int retval;
char base64_blinded_pubkey[ED25519_BASE64_LEN + 1];
uint64_t current_time_period = hs_get_time_period_num(0);
- smartlist_t *responsible_hsdirs;
+ smartlist_t *responsible_hsdirs = NULL;
ed25519_public_key_t blinded_pubkey;
routerstatus_t *hsdir_rs = NULL;
tor_assert(onion_identity_pk);
- responsible_hsdirs = smartlist_new();
-
/* Get blinded pubkey of hidden service */
hs_build_blinded_pubkey(onion_identity_pk, NULL, 0,
current_time_period, &blinded_pubkey);
@@ -383,6 +381,8 @@ pick_hsdir_v3(const ed25519_public_key_t *onion_identity_pk)
}
/* Get responsible hsdirs of service for this time period */
+ responsible_hsdirs = smartlist_new();
+
hs_get_responsible_hsdirs(&blinded_pubkey, current_time_period,
0, 1, responsible_hsdirs);