Commit 4eff8b65 authored by Nick Mathewson's avatar Nick Mathewson 🦞
Browse files

When we mark a node as a sybil, mark it down and reset its uptime to 0

This prevents bug 8147, where such nodes would accrue points towards
Guard, Fast, HSDir, and so on.

Fixes bug 8147.
parent 61995d3e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -8,3 +8,6 @@
    - Do not consider nodes with extremely low bandwidths when deciding
      thresholds for various directory flags. Another fix for 8145.

    - When marking a node as a likely sybil, reset its uptime metrics
      to zero, so that it cannot time towards getting marked as Guard,
      Stable, or HSDir. Fix for bug 8147.
+5 −0
Original line number Diff line number Diff line
@@ -2776,6 +2776,11 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
  routers_sort_by_identity(routers);
  omit_as_sybil = get_possible_sybil_list(routers);

  DIGESTMAP_FOREACH(omit_as_sybil, sybil_id, void *, ignore) {
    (void) ignore;
    rep_hist_make_router_pessimal(sybil_id, now);
  } DIGESTMAP_FOREACH_END;

  dirserv_compute_performance_thresholds(rl, omit_as_sybil);

  routerstatuses = smartlist_new();
+15 −0
Original line number Diff line number Diff line
@@ -422,6 +422,21 @@ rep_hist_note_router_unreachable(const char *id, time_t when)
  }
}

/** Mark a router with ID <b>id</b> as non-Running, and retroactively declare
 * that it has never been running: give it no stability and no WFU. */
void
rep_hist_make_router_pessimal(const char *id, time_t when)
{
  or_history_t *hist = get_or_history(id);
  tor_assert(hist);

  rep_hist_note_router_unreachable(id, when);
  mark_or_down(hist, when, 1);

  hist->weighted_run_length = 0;
  hist->weighted_uptime = 0;
}

/** Helper: Discount all old MTBF data, if it is time to do so.  Return
 * the time at which we should next discount MTBF data. */
time_t
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ void rep_hist_dump_stats(time_t now, int severity);
void rep_hist_note_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_bytes_written(size_t num_bytes, time_t when);

void rep_hist_make_router_pessimal(const char *id, time_t when);

void rep_hist_note_dir_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_dir_bytes_written(size_t num_bytes, time_t when);