--- /dev/null
+ o Minor bugfixes:
+ - Fix node selection logic in smartlist_choose_node_by_bandwidth()
+ so that onion routers with BadExit flag are not considered to be
+ worthy candidates. Fixes issue 13066.
static origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *);
static const origin_circuit_t *CONST_TO_ORIGIN_CIRCUIT(const circuit_t *);
+/** Return 1 iff <b>node</b> has Exit flag and no BadExit flag.
+ * Otherwise, return 0.
+ */
+static INLINE int node_is_good_exit(const node_t *node)
+{
+ return node->is_exit && ! node->is_bad_exit;
+}
+
static INLINE or_circuit_t *TO_OR_CIRCUIT(circuit_t *x)
{
tor_assert(x->magic == OR_CIRCUIT_MAGIC);
uint32_t this_bw = 0;
i = node_sl_idx;
- is_exit = node->is_exit;
+ is_exit = node_is_good_exit(node);
is_guard = node->is_possible_guard;
if (node->rs) {
if (node->rs->has_bandwidth) {