Don't launch a useless circuit in rend_client_reextend_intro_circuit

Fixes bug 4212.  Bug reported by katmagic and found by Sebastian.
This commit is contained in:
Robert Ransom 2011-10-09 20:24:27 -07:00
parent f37d24c550
commit 274b25de12
2 changed files with 17 additions and 10 deletions

13
changes/bug4212 Normal file
View File

@ -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.

View File

@ -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;