Commit ceb6dee4 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Increase limit for status vote download size by a factor of 5.

We've started to hit the limit here.  We introduced the limit in
0.1.2.5-alpha.  This fixes bug 14261, but we should have a smarter way
to not actually do the behavior this permits.  See #14267 for a ticket
about fixing that.
parent 2329d9fe
Loading
Loading
Loading
Loading

changes/bug14261

0 → 100644
+5 −0
Original line number Diff line number Diff line
  O Minor bugfixes (directory authority):
    - Allow directory authorities to fetch more data from one
      another if they find themselves missing lots of votes.
      Previously, they had been bumping against the 10 MB queued
      data limit. Fixes bug 14261. Bugfix on 0.1.2.5-alpha.
+8 −1
Original line number Diff line number Diff line
@@ -2183,12 +2183,15 @@ connection_dir_reached_eof(dir_connection_t *conn)
 */
#define MAX_DIRECTORY_OBJECT_SIZE (10*(1<<20))

#define MAX_VOTE_DL_SIZE (MAX_DIRECTORY_OBJECT_SIZE * 5)

/** Read handler for directory connections.  (That's connections <em>to</em>
 * directory servers and connections <em>at</em> directory servers.)
 */
int
connection_dir_process_inbuf(dir_connection_t *conn)
{
  size_t max_size;
  tor_assert(conn);
  tor_assert(conn->base_.type == CONN_TYPE_DIR);

@@ -2207,7 +2210,11 @@ connection_dir_process_inbuf(dir_connection_t *conn)
    return 0;
  }

  if (connection_get_inbuf_len(TO_CONN(conn)) > MAX_DIRECTORY_OBJECT_SIZE) {
  max_size =
    (TO_CONN(conn)->purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) ?
    MAX_VOTE_DL_SIZE : MAX_DIRECTORY_OBJECT_SIZE;

  if (connection_get_inbuf_len(TO_CONN(conn)) > max_size) {
    log_warn(LD_HTTP, "Too much data received from directory connection: "
             "denial of service attempt, or you need to upgrade?");
    connection_mark_for_close(TO_CONN(conn));