From a2727f62494b8a56152214017ac8fb348dd064be Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Tue, 22 Feb 2011 17:54:25 -0500 Subject: [PATCH] prevent same entry and exit for insane edge case --- changes/bug2403 | 6 ++++++ src/or/circuitbuild.c | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 changes/bug2403 diff --git a/changes/bug2403 b/changes/bug2403 new file mode 100644 index 0000000000..3b29b37fbb --- /dev/null +++ b/changes/bug2403 @@ -0,0 +1,6 @@ + o Minor bugfixes: + - In the special case where you configure a public exit relay as your + bridge, Tor would be willing to use that exit relay as the last + hop in your circuit as well. Now we fail that circuit instead. + Bugfix on 0.2.0.12-alpha. Fixes bug 2403. Reported by "piebeer". + diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 4f8f5fbab0..b3c9f0e1b5 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -4063,7 +4063,6 @@ choose_random_entry(cpath_build_state_t *state) int preferred_min, consider_exit_family = 0; if (chosen_exit) { - smartlist_add(exit_family, chosen_exit); routerlist_add_family(exit_family, chosen_exit); consider_exit_family = 1; } @@ -4086,6 +4085,8 @@ choose_random_entry(cpath_build_state_t *state) r = entry_is_live(entry, need_uptime, need_capacity, 0, &msg); if (!r) continue; /* down, no point */ + if (r == chosen_exit) + continue; /* don't pick the same node for entry and exit */ if (consider_exit_family && smartlist_isin(exit_family, r)) continue; /* avoid relays that are family members of our exit */ if (options->EntryNodes &&