[tor-commits] [tor/master] hs-v3: Close all SOCKS request on descriptor failure

nickm at torproject.org nickm at torproject.org
Thu Sep 20 20:27:09 UTC 2018


commit fa6d5dd2686d9fedfbbea9bdf0d7dab1a7afc7c4
Author: David Goulet <dgoulet at torproject.org>
Date:   Wed Sep 19 10:56:15 2018 -0400

    hs-v3: Close all SOCKS request on descriptor failure
    
    Client side, when a descriptor is finally fetched and stored in the cache, we
    then go over all pending SOCKS request for that descriptor. If it turns out
    that the intro points are unusable, we close the first SOCKS request but not
    the others for the same .onion.
    
    This commit makes it that we'll close all SOCKS requests so we don't let
    hanging the other ones.
    
    It also fixes another bug which is having a SOCKS connection in RENDDESC_WAIT
    state but with a descriptor in the cache. At some point, tor will expire the
    intro failure cache which will make that descriptor usable again. When
    retrying all SOCKS connection (retry_all_socks_conn_waiting_for_desc()), we
    won't end up in the code path where we have already the descriptor for a
    pending request causing a BUG().
    
    Bottom line is that we should never have pending requests (waiting for a
    descriptor) with that descriptor in the cache (even if unusable).
    
    Fixees #27410.
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 changes/ticket27410 | 5 +++++
 src/or/hs_client.c  | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/changes/ticket27410 b/changes/ticket27410
new file mode 100644
index 000000000..a21fdde58
--- /dev/null
+++ b/changes/ticket27410
@@ -0,0 +1,5 @@
+  o Minor bugfixes (hidden service v3):
+    - Close all SOCKS request (for the same .onion) if the newly fetched
+      descriptor is unusable. Before that, we would close only the first one
+      leaving the other hanging and let to time out by themselves. Fixes bug
+      27410; bugfix on 0.3.2.1-alpha.
diff --git a/src/or/hs_client.c b/src/or/hs_client.c
index 4e2824c13..fb21e6f20 100644
--- a/src/or/hs_client.c
+++ b/src/or/hs_client.c
@@ -1423,7 +1423,7 @@ hs_client_desc_has_arrived(const hs_ident_dir_conn_t *ident)
       /* We are unable to use the descriptor so remove the directory request
        * from the cache so the next connection can try again. */
       note_connection_attempt_succeeded(edge_conn->hs_ident);
-      goto end;
+      continue;
     }
 
     log_info(LD_REND, "Descriptor has arrived. Launching circuits.");





More information about the tor-commits mailing list