]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Handle a failure edge-case when a client-side intro circ opens.
authorGeorge Kadianakis <desnacked@riseup.net>
Fri, 3 Jul 2020 13:06:17 +0000 (16:06 +0300)
committerGeorge Kadianakis <desnacked@riseup.net>
Thu, 9 Jul 2020 07:10:57 +0000 (10:10 +0300)
changes/bug34084 [new file with mode: 0644]
src/feature/hs/hs_client.c

diff --git a/changes/bug34084 b/changes/bug34084
new file mode 100644 (file)
index 0000000..524c4cf
--- /dev/null
@@ -0,0 +1,3 @@
+  o Minor bugfixes (onion services v3):
+    - Avoid a non-fatal assert log in an edge-case of opening an intro circuit
+      as a client. Fixes bug 34084; bugfix on 0.3.2.1-alpha.
index c3697d0c1d527cad173dd17653876794089fb571..a49999d7d1b0494490b771963b9d81325c21a3a5 100644 (file)
@@ -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);
 }