Commit dd085d42 authored by Nick Mathewson's avatar Nick Mathewson 🎨
Browse files

Do not count controller-selected paths towards path bias.

As a side effect, this fixes a "Bug" warning.

Closes #40515.  Bugfix on 0.2.4.10-alpha.
parent 882fd1f0
o Minor bugfixes (controller, path bias):
- When a circuit's path is specified, in full or in part, from the
controller API, do not count that circuit towards our path-bias
calculations. (Doing so was incorrect, since we cannot tell whether
the controller is selecting relays randomly.) Resolves a "Bug"
warning. Fixes bug 40515; bugfix on 0.2.4.10-alpha.
......@@ -182,6 +182,12 @@ struct origin_circuit_t {
*/
unsigned first_hop_from_controller : 1;
/**
* If true, this circuit's path has been chosen, in full or in part,
* by the controller API, and it's okay to ignore checks that we'd
* usually do on the path as whole. */
unsigned int any_hop_from_controller : 1;
/**
* Tristate variable to guard against pathbias miscounting
* due to circuit purpose transitions changing the decision
......
......@@ -363,6 +363,17 @@ pathbias_should_count(origin_circuit_t *circ)
return 0;
}
/* Ignore circuits where the controller helped choose the path. When
* this happens, we can't be sure whether the path was chosen randomly
* or not. */
if (circ->any_hop_from_controller) {
/* (In this case, we _don't_ check to see if shouldcount is changing,
* since it's possible that an already-created circuit later gets extended
* by the controller. */
circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED;
return 0;
}
/* Completely ignore one hop circuits */
if (circ->build_state->onehop_tunnel ||
circ->build_state->desired_path_len == 1) {
......
......@@ -822,6 +822,8 @@ handle_control_extendcircuit(control_connection_t *conn,
circ->first_hop_from_controller = 1;
}
circ->any_hop_from_controller = 1;
/* now circ refers to something that is ready to be extended */
first_node = zero_circ;
SMARTLIST_FOREACH(nodes, const node_t *, node,
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment