]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Flag cannibalized circs as used (non-ideal).
authorMike Perry <mikeperry-git@fscked.org>
Mon, 10 Dec 2012 03:18:04 +0000 (19:18 -0800)
committerMike Perry <mikeperry-git@fscked.org>
Mon, 10 Dec 2012 03:18:04 +0000 (19:18 -0800)
Also add some comments.

src/or/circuitbuild.c
src/or/circuituse.c

index c3a5827589f9b365782ad3ee3a94d22f16b90683..7282d57c74a30a69f7111e3e5bb538db994828d2 100644 (file)
@@ -1219,6 +1219,10 @@ pathbias_count_first_hop(origin_circuit_t *circ)
     return 0;
   }
 
+  // XXX: Technically, we could make this only count from the *second* hop..
+  // Until we get per-hop MACs or a lower circ failure rate, this might be
+  // better from a false positive POV. Should we s/first_hop/circ_attempt/g?
+  // Then we can control this check from the consensus.
   if (circ->cpath->state == CPATH_STATE_AWAITING_KEYS) {
     /* Help track down the real cause of bug #6475: */
     if (circ->has_opened && circ->path_state != PATH_STATE_DID_FIRST_HOP) {
index 0b799b11ae5495f5bafc4a5f049c594c40312553..781e9845110285cfedd785bbe4bee3a873d76373 100644 (file)
@@ -1160,6 +1160,17 @@ circuit_has_opened(origin_circuit_t *circ)
 {
   control_event_circuit_status(circ, CIRC_EVENT_BUILT, 0);
 
+  /* Cannibalized circuits count as used for path bias.
+   * (PURPOSE_GENERAL circs especially, since they are 
+   * marked dirty and often go unused after preemptive
+   * building). */
+  // XXX: Cannibalized now use RELAY_EARLY, which is visible
+  // to taggers end-to-end! We really need to probe these instead.
+  if (circ->has_opened &&
+      circ->build_state->desired_path_len > DEFAULT_ROUTE_LEN) {
+    circ->path_state = PATH_STATE_USE_SUCCEEDED;
+  }
+
   /* Remember that this circuit has finished building. Now if we start
    * it building again later (e.g. by extending it), we will know not
    * to consider its build time. */
@@ -1411,7 +1422,11 @@ circuit_launch_by_extend_info(uint8_t purpose,
          *
          * Same deal goes for client side introductions. Clients
          * can be manipulated to connect repeatedly to them
-         * (especially web clients). */
+         * (especially web clients).
+         *
+         * If we decide to probe the initial portion of these circs,
+         * (up to the adversaries final hop), we need to remove this.
+         */
         circ->path_state = PATH_STATE_USE_SUCCEEDED;
         /* This must be called before the purpose change */
         pathbias_check_close(circ);