summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2020-07-03 16:06:17 +0300
committerGeorge Kadianakis <desnacked@riseup.net>2020-07-09 10:10:57 +0300
commite0da64fd27a8c1a34668dfa337877c0aeb398022 (patch)
tree6acbad7cf226e7ee532a3103103434e6efbacda6 /src
parent9603d8af0b36dc8faf297c2a300becebfc2f721b (diff)
downloadtor-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.c17
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);
}