Browse Source

backport candidate:
If not enough of our entry guards are available so we add a new
one, we might use the new one even if it overlapped with the
current circuit's exit relay (or its family). Anonymity bugfix
pointed out by rovv.


svn:r16698

Roger Dingledine 17 years ago
parent
commit
cfff21e78a
2 changed files with 11 additions and 2 deletions
  1. 5 1
      ChangeLog
  2. 6 1
      src/or/circuitbuild.c

+ 5 - 1
ChangeLog

@@ -1,4 +1,4 @@
-Changes in version 0.2.1.5-alpha - 2008-08-??
+Changes in version 0.2.1.5-alpha - 2008-09-??
   o Major features [IPv6 support]:
   o Major features [IPv6 support]:
     - Convert many internal address representations to optionally hold
     - Convert many internal address representations to optionally hold
       IPv6 addresses.
       IPv6 addresses.
@@ -18,6 +18,10 @@ Changes in version 0.2.1.5-alpha - 2008-08-??
       a digest of all zeroes, or asks to extend back to the relay that
       a digest of all zeroes, or asks to extend back to the relay that
       sent the extend cell, tear down the circuit. Ideas suggested
       sent the extend cell, tear down the circuit. Ideas suggested
       by rovv.
       by rovv.
+    - If not enough of our entry guards are available so we add a new
+      one, we might use the new one even if it overlapped with the
+      current circuit's exit relay (or its family). Anonymity bugfix
+      pointed out by rovv.
 
 
   o Minor bugfixes:
   o Minor bugfixes:
     - Recover 3-7 bytes that were wasted per memory chunk.  Fixes bug
     - Recover 3-7 bytes that were wasted per memory chunk.  Fixes bug

+ 6 - 1
src/or/circuitbuild.c

@@ -2476,8 +2476,13 @@ choose_random_entry(cpath_build_state_t *state)
        * be a long time til we get it. -RD */
        * be a long time til we get it. -RD */
       r = add_an_entry_guard(NULL, 0);
       r = add_an_entry_guard(NULL, 0);
       if (r) {
       if (r) {
-        smartlist_add(live_entry_guards, r);
         entry_guards_changed();
         entry_guards_changed();
+        /* XXX we start over here in case the new node we added shares
+         * a family with our exit node. There's a chance that we'll just
+         * load up on entry guards here, if the network we're using is
+         * one big family. Perhaps we should teach add_an_entry_guard()
+         * to understand nodes-to-avoid-if-possible? -RD */
+        goto retry;
       }
       }
     }
     }
     if (!r && need_uptime) {
     if (!r && need_uptime) {