diff options
author | George Kadianakis <desnacked@riseup.net> | 2020-07-03 16:06:17 +0300 |
---|---|---|
committer | George Kadianakis <desnacked@riseup.net> | 2020-07-09 10:10:57 +0300 |
commit | e0da64fd27a8c1a34668dfa337877c0aeb398022 (patch) | |
tree | 6acbad7cf226e7ee532a3103103434e6efbacda6 /src | |
parent | 9603d8af0b36dc8faf297c2a300becebfc2f721b (diff) | |
download | tor-e0da64fd27a8c1a34668dfa337877c0aeb398022.tar.gz tor-e0da64fd27a8c1a34668dfa337877c0aeb398022.zip |
Handle a failure edge-case when a client-side intro circ opens.
Diffstat (limited to 'src')
-rw-r--r-- | src/feature/hs/hs_client.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c index c3697d0c1d..a49999d7d1 100644 --- a/src/feature/hs/hs_client.c +++ b/src/feature/hs/hs_client.c @@ -704,8 +704,11 @@ send_introduce1(origin_circuit_t *intro_circ, } /** Using the introduction circuit circ, setup the authentication key of the - * intro point this circuit has extended to. */ -static void + * intro point this circuit has extended to. + * + * Return 0 if everything went well, otherwise return -1 in the case of errors. + */ +static int setup_intro_circ_auth_key(origin_circuit_t *circ) { const hs_descriptor_t *desc; @@ -736,10 +739,12 @@ setup_intro_circ_auth_key(origin_circuit_t *circ) /* Reaching this point means we didn't find any intro point for this circuit * which is not supposed to happen. */ - tor_assert_nonfatal_unreached(); + circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); + log_info(LD_REND, "Could not match opened intro circuit with intro point."); + return -1; end: - return; + return 0; } /** Called when an introduction circuit has opened. */ @@ -754,7 +759,9 @@ client_intro_circ_has_opened(origin_circuit_t *circ) /* This is an introduction circuit so we'll attach the correct * authentication key to the circuit identifier so it can be identified * properly later on. */ - setup_intro_circ_auth_key(circ); + if (setup_intro_circ_auth_key(circ) < 0) { + return; + } connection_ap_attach_pending(1); } |