From e0486c937178981585d45b65b359f488ed96c06d Mon Sep 17 00:00:00 2001 From: teor Date: Thu, 2 Mar 2017 15:33:09 +1100 Subject: [PATCH] Make hidden services always check for failed intro point connections Previously, they would stop checking when they exceeded their intro point creation limit. Fixes bug 21596; bugfix on commit d67bf8b2f23 in Tor 0.2.7.2-alpha. Reported by alecmuffett. --- changes/bug21596 | 5 +++++ src/or/rendservice.c | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 changes/bug21596 diff --git a/changes/bug21596 b/changes/bug21596 new file mode 100644 index 000000000..ec0a46bb8 --- /dev/null +++ b/changes/bug21596 @@ -0,0 +1,5 @@ + o Minor bugfixes (hidden services): + - Make hidden services check for failed intro point connections, even when + they have exceeded their intro point creation limit. Fixes bug 21596; + bugfix on commit d67bf8b2f23 in Tor 0.2.7.2-alpha. Reported by + alecmuffett. diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 4d04da02a..c04f5bb6e 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -3930,6 +3930,10 @@ rend_consider_services_intro_points(void) smartlist_clear(exclude_nodes); smartlist_clear(retry_nodes); + /* Cleanup the invalid intro points and save the node objects, if any, + * in the exclude_nodes and retry_nodes lists. */ + remove_invalid_intro_points(service, exclude_nodes, retry_nodes, now); + /* This retry period is important here so we don't stress circuit * creation. */ if (now > service->intro_period_started + INTRO_CIRC_RETRY_PERIOD) { @@ -3939,14 +3943,10 @@ rend_consider_services_intro_points(void) } else if (service->n_intro_circuits_launched >= MAX_INTRO_CIRCS_PER_PERIOD) { /* We have failed too many times in this period; wait for the next - * one before we try again. */ + * one before we try to initiate any more connections. */ continue; } - /* Cleanup the invalid intro points and save the node objects, if apply, - * in the exclude_nodes and retry_nodes list. */ - remove_invalid_intro_points(service, exclude_nodes, retry_nodes, now); - /* Let's try to rebuild circuit on the nodes we want to retry on. */ SMARTLIST_FOREACH_BEGIN(retry_nodes, rend_intro_point_t *, intro) { r = rend_service_launch_establish_intro(service, intro);