[tor-bugs] #25686 [Core Tor/Tor]: Mystery bug causes relays to attempt many many descriptor publishes, with no X-Desc-Gen-Reason header

Tor Bug Tracker & Wiki blackhole at torproject.org
Mon Apr 2 01:27:46 UTC 2018


#25686: Mystery bug causes relays to attempt many many descriptor publishes, with
no X-Desc-Gen-Reason header
------------------------------+----------------------------------
     Reporter:  arma          |      Owner:  (none)
         Type:  defect        |     Status:  new
     Priority:  Medium        |  Milestone:
    Component:  Core Tor/Tor  |    Version:
     Severity:  Normal        |   Keywords:  034-roadmap-proposed
Actual Points:                |  Parent ID:
       Points:                |   Reviewer:
      Sponsor:                |
------------------------------+----------------------------------
 Sometimes relays get into a state where they try to publish a new
 descriptor every second, and this state lasts for hours or days.

 I instrumented moria1 to keep track of the X-Desc-Gen-Reason headers in
 each descriptor upload attempt:
 {{{
 diff --git a/src/or/directory.c b/src/or/directory.c
 index c419b61..4570b20 100644
 --- a/src/or/directory.c
 +++ b/src/or/directory.c
 @@ -5102,6 +5102,15 @@ directory_handle_command_post,(dir_connection_t
 *conn, const char *headers,
      const char *msg = "[None]";
      uint8_t purpose = authdir_mode_bridge(options) ?
                        ROUTER_PURPOSE_BRIDGE : ROUTER_PURPOSE_GENERAL;
 +
 +    {
 +      char *genreason = http_get_header(headers, "X-Desc-Gen-Reason: ");
 +      log_info(LD_DIRSERV,
 +               "New descriptor post, because: %s",
 +               genreason ? genreason : "not specified");
 +      tor_free(genreason);
 +    }
 +
      was_router_added_t r = dirserv_add_multiple_descriptors(body,
 purpose,
                                               conn->base_.address, &msg);
      tor_assert(msg);
 }}}

 And then I counted up the number of upload attempts of each type over the
 last two-ish weeks:
 {{{
 $ grep "New descriptor post, because:" moria1-info|cut -d: -f5-|sort|uniq
 -c
   20685  bandwidth has changed
       1  Chosen Or/DirPort changed
   53191  config change
     601  configured managed proxies
   41663  DirPort found reachable
      96  dns resolvers back
     191  IP address changed
  131619  not listed in consensus
 1647625  not specified
   31440  ORPort found reachable
    8518  rotated onion key
      28  set onion key
  120487  time for new descriptor
     156  Tor just started
   25362  version listed in consensus is quite old
 }}}

 Now, the weird "not listed in consensus" and "version listed in consensus
 is quite old" ones are #25685.

 But there are a huge number that are simply lacking this header. These
 tend to come from a relatively small number of relays that are just
 bombing me with publish attempts.

 In fact, out of those 1647625 attempts that didn't provide a reason,
 nearly all of them got discarded:
 {{{
 $ grep -A1 "New descriptor post, because: not specified" moria1-info|grep
 "Not replacing descriptor"|wc -l
 1645051
 }}}

 We should try to track down what bug on the relay side causes republishes
 without including a reason header. Maybe we do this by examining the code
 and looking for mistakes where a republish can happen without also setting
 the reason header?

 See #3942 for a time long ago that we had problems with listing our
 reason. And see #21642 for where a lot of this analysis started.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/25686>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list