]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Bug #40842: Don't send on sets that are being torn down
authorMike Perry <mikeperry-git@torproject.org>
Fri, 25 Aug 2023 22:42:18 +0000 (22:42 +0000)
committerMike Perry <mikeperry-git@torproject.org>
Fri, 25 Aug 2023 22:45:07 +0000 (22:45 +0000)
src/core/or/conflux.c
src/core/or/conflux_util.c

index 0082089504be6c7be11b7dc522c8add5895af5b8..0a2806b1dc3eb66d645c4136a7ecff957b6e0149 100644 (file)
@@ -604,6 +604,12 @@ conflux_decide_next_circ(conflux_t *cfx)
   // this once tuning is complete.
   conflux_validate_legs(cfx);
 
+  /* If the conflux set is tearing down and has no current leg,
+   * bail and give up */
+  if (cfx->in_full_teardown) {
+    return NULL;
+  }
+
   /* If we don't have a current leg yet, pick one.
    * (This is the only non-const operation in this function). */
   if (!cfx->curr_leg) {
index 7e2e938ca4802a9babb74af13c04a6e49a117e02..9d1a4bd3083b53e96753ef0eb82897c587dbab8e 100644 (file)
@@ -38,6 +38,13 @@ circuit_get_package_window(circuit_t *circ,
       tor_assert_nonfatal(circ->purpose ==
                           CIRCUIT_PURPOSE_CONFLUX_LINKED);
     }
+    circuit_t *orig_circ = circ;
+
+    /* If conflux is in the process of tearing down the set,
+     * the package window is 0 -- there is no room. */
+    if (circ->conflux->in_full_teardown)
+      return 0;
+
     circ = conflux_decide_next_circ(circ->conflux);
 
     /* If conflux has no circuit to send on, the package window is 0. */