]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
hs: Do not close desc fetch conn. if we can't pick an HSDir
authorDavid Goulet <dgoulet@ev0ke.net>
Mon, 14 Mar 2016 15:00:46 +0000 (11:00 -0400)
committerDavid Goulet <dgoulet@ev0ke.net>
Mon, 14 Mar 2016 15:00:46 +0000 (11:00 -0400)
Launching 7 descriptor fetches makes a connection to each HSDir that is 6
and the seventh one fails to pick an HSDir because they are all being used
already so it was killing all pending connections at once.

Fixes #15937

Signed-off-by: David Goulet <dgoulet@ev0ke.net>
changes/bug15937 [new file with mode: 0644]
src/or/rendclient.c

diff --git a/changes/bug15937 b/changes/bug15937
new file mode 100644 (file)
index 0000000..6c73fa4
--- /dev/null
@@ -0,0 +1,7 @@
+  o Minor bug fix (hidden service client):
+    - Seven very fast consecutive requests to the same .onion address
+      triggers 7 descriptor fetches. The first six each pick a directory
+      (there are 6 overall) and the seventh one wasn't able to pick one
+      which was triggering a close on all current directory connections. It
+      has been fixed by not closing them if we have pending directory fetch.
+      Fixes #15937; Bugfix on tor-0.2.7.1-alpha.
index 7e1b0e19080d81a2b6e16b6a630d0b14011b8757..609c45c71dfe062217d435c37fad0432a0ae8b9d 100644 (file)
@@ -892,7 +892,6 @@ rend_client_fetch_v2_desc(rend_data_t *query, smartlist_t *hsdirs)
 void
 rend_client_refetch_v2_renddesc(rend_data_t *rend_query)
 {
-  int ret;
   rend_cache_entry_t *e = NULL;
 
   tor_assert(rend_query);
@@ -912,11 +911,10 @@ rend_client_refetch_v2_renddesc(rend_data_t *rend_query)
   log_debug(LD_REND, "Fetching v2 rendezvous descriptor for service %s",
             safe_str_client(rend_query->onion_address));
 
-  ret = rend_client_fetch_v2_desc(rend_query, NULL);
-  if (ret <= 0) {
-    /* Close pending connections on error or if no hsdir can be found. */
-    rend_client_desc_trynow(rend_query->onion_address);
-  }
+  rend_client_fetch_v2_desc(rend_query, NULL);
+  /* We don't need to look the error code because either on failure or
+   * success, the necessary steps to continue the HS connection will be
+   * triggered once the descriptor arrives or if all fetch failed. */
   return;
 }