mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Merge remote-tracking branch 'dgoulet/bug24469_033_01'
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
o Minor bugfixes (circuit, cannibalization):
|
||||
- Don't cannibalize circuits for which we don't know the first hop which
|
||||
can happen if our Guard relay went off the consensus after the circuit
|
||||
was created preemptively. Fixes bug 24469; bugfix on 0.0.6.
|
||||
@@ -1803,6 +1803,13 @@ circuit_find_to_cannibalize(uint8_t purpose_to_produce, extend_info_t *info,
|
||||
goto next;
|
||||
}
|
||||
|
||||
/* Ignore any circuits for which we can't use the Guard. It is possible
|
||||
* that the Guard was removed from the samepled set after the circuit
|
||||
* was created so avoid using it. */
|
||||
if (!entry_guard_could_succeed(circ->guard_state)) {
|
||||
goto next;
|
||||
}
|
||||
|
||||
if ((!need_uptime || circ->build_state->need_uptime) &&
|
||||
(!need_capacity || circ->build_state->need_capacity) &&
|
||||
(internal == circ->build_state->is_internal) &&
|
||||
|
||||
@@ -3307,6 +3307,22 @@ entry_guards_update_state(or_state_t *state)
|
||||
entry_guards_dirty = 0;
|
||||
}
|
||||
|
||||
/** Return true iff the circuit's guard can succeed that is can be used. */
|
||||
int
|
||||
entry_guard_could_succeed(const circuit_guard_state_t *guard_state)
|
||||
{
|
||||
if (!guard_state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
entry_guard_t *guard = entry_guard_handle_get(guard_state->guard);
|
||||
if (!guard || BUG(guard->in_selection == NULL)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a single entry guard in the format expected by the controller.
|
||||
* Return a newly allocated string.
|
||||
|
||||
@@ -386,6 +386,8 @@ void entry_guards_note_internet_connectivity(guard_selection_t *gs);
|
||||
|
||||
int update_guard_selection_choice(const or_options_t *options);
|
||||
|
||||
int entry_guard_could_succeed(const circuit_guard_state_t *guard_state);
|
||||
|
||||
MOCK_DECL(int,num_bridges_usable,(int use_maybe_reachable));
|
||||
|
||||
#ifdef ENTRYNODES_PRIVATE
|
||||
|
||||
Reference in New Issue
Block a user