aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2018-01-15 16:30:55 -0500
committerRoger Dingledine <arma@torproject.org>2018-01-19 02:28:55 -0500
commita15eb9ff439623f800de813c1a78eeb5d61f7f5a (patch)
treee4b674fa6f36be4c0d2dad5014713d68bb325f60
parent9464da210d3214fc094f5fc3b2c229470dbea59c (diff)
downloadtor-a15eb9ff439623f800de813c1a78eeb5d61f7f5a.tar.gz
tor-a15eb9ff439623f800de813c1a78eeb5d61f7f5a.zip
MAX_REND_FAILURES is 1, but we would try three times
Fix an "off by 2" error in counting rendezvous failures on the onion service side. While we thought we would stop the rendezvous attempt after one failed circuit, we were actually making three circuit attempts before giving up. Fixes bug 24895; bugfix on 0.0.6.
-rw-r--r--changes/bug248956
-rw-r--r--src/or/rendservice.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/changes/bug24895 b/changes/bug24895
new file mode 100644
index 0000000000..7b90f6d260
--- /dev/null
+++ b/changes/bug24895
@@ -0,0 +1,6 @@
+ o Major bugfixes (onion services):
+ - Fix an "off by 2" error in counting rendezvous failures on the
+ onion service side. While we thought we would stop the rendezvous
+ attempt after one failed circuit, we were actually making three
+ circuit attempts before giving up. Fixes bug 24895; bugfix on 0.0.6.
+
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index a8c383444d..acc431a577 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -2930,8 +2930,11 @@ rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc)
}
oldcirc->hs_service_side_rend_circ_has_been_relaunched = 1;
+ /* We check failure_count >= MAX_REND_FAILURES-1 below rather than
+ * failure_count >= MAX_REND_FAILURES, because we increment the failure
+ * count for our current failure *after* this clause. */
if (!oldcirc->build_state ||
- oldcirc->build_state->failure_count > MAX_REND_FAILURES ||
+ oldcirc->build_state->failure_count >= MAX_REND_FAILURES-1 ||
oldcirc->build_state->expiry_time < time(NULL)) {
log_info(LD_REND,
"Attempt to build circuit to %s for rendezvous has failed "