diff options
author | Robert Ransom <rransom.8774@gmail.com> | 2011-10-09 20:24:27 -0700 |
---|---|---|
committer | Robert Ransom <rransom.8774@gmail.com> | 2011-10-10 03:05:19 -0700 |
commit | 274b25de1258647d00509b4a8e378a2115da066c (patch) | |
tree | 700851956e5d48285f0923174f92c95ab143c1b7 | |
parent | f37d24c550a0d8512249f77262c01960af6ed31b (diff) | |
download | tor-274b25de1258647d00509b4a8e378a2115da066c.tar.gz tor-274b25de1258647d00509b4a8e378a2115da066c.zip |
Don't launch a useless circuit in rend_client_reextend_intro_circuit
Fixes bug 4212. Bug reported by katmagic and found by Sebastian.
-rw-r--r-- | changes/bug4212 | 13 | ||||
-rw-r--r-- | src/or/rendclient.c | 14 |
2 files changed, 17 insertions, 10 deletions
diff --git a/changes/bug4212 b/changes/bug4212 new file mode 100644 index 0000000000..6222a59978 --- /dev/null +++ b/changes/bug4212 @@ -0,0 +1,13 @@ + o Major bugfixes: + + - Don't launch a useless circuit after failing to use one of a + hidden service's introduction points. Previously, we would + launch a new introduction circuit, but not set the hidden + service which that circuit was intended to connect to, so it + would never actually be used. A different piece of code would + then create a new introduction circuit correctly, so this bug + was harmless until it caused an assertion in the client-side + part of the #3825 fix to fail. Bug reported by katmagic and + found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug + 4212. + diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 533dfb8a97..9c247f5c71 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -106,17 +106,11 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ) result = circuit_extend_to_new_exit(circ, extend_info); } else { log_info(LD_REND, - "Building a new introduction circuit, this time to %s.", - safe_str_client(extend_info_describe(extend_info))); + "Closing intro circ %d (out of RELAY_EARLY cells).", + circ->_base.n_circ_id); circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED); - if (!circuit_launch_by_extend_info(CIRCUIT_PURPOSE_C_INTRODUCING, - extend_info, - CIRCLAUNCH_IS_INTERNAL)) { - log_warn(LD_REND, "Building introduction circuit failed."); - result = -1; - } else { - result = 0; - } + /* connection_ap_handshake_attach_circuit will launch a new intro circ. */ + result = 0; } extend_info_free(extend_info); return result; |