[tor-commits] [tor/master] vote: TROVE-2018-005 Make DirAuths omit misbehaving routers from their vote.

nickm at torproject.org nickm at torproject.org
Tue May 22 16:34:01 UTC 2018


commit 3283619acfcd9ad93edc891600991cff9ed3bed9
Author: Isis Lovecruft <isis at torproject.org>
Date:   Mon May 7 23:59:06 2018 +0000

    vote: TROVE-2018-005 Make DirAuths omit misbehaving routers from their vote.
---
 src/or/dirauth/dirvote.c |  6 ++++++
 src/or/protover.c        | 12 ++++++++++++
 src/or/protover.h        |  1 +
 3 files changed, 19 insertions(+)

diff --git a/src/or/dirauth/dirvote.c b/src/or/dirauth/dirvote.c
index cbc3ff782..b097b10cf 100644
--- a/src/or/dirauth/dirvote.c
+++ b/src/or/dirauth/dirvote.c
@@ -4358,6 +4358,12 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
   microdescriptors = smartlist_new();
 
   SMARTLIST_FOREACH_BEGIN(routers, routerinfo_t *, ri) {
+    /* If it has a protover list and contains a protocol name greater than
+     * MAX_PROTOCOL_NAME_LENGTH, skip it. */
+    if (ri->protocol_list &&
+        protover_contains_long_protocol_names(ri->protocol_list)) {
+      continue;
+    }
     if (ri->cache_info.published_on >= cutoff) {
       routerstatus_t *rs;
       vote_routerstatus_t *vrs;
diff --git a/src/or/protover.c b/src/or/protover.c
index 97d436dd1..5cd9c96a1 100644
--- a/src/or/protover.c
+++ b/src/or/protover.c
@@ -277,6 +277,18 @@ parse_protocol_list(const char *s)
 }
 
 /**
+ * Return true if the unparsed protover in <b>s</b> would contain a protocol
+ * name longer than MAX_PROTOCOL_NAME_LENGTH, and false otherwise.
+ */
+bool
+protover_contains_long_protocol_names(const char *s)
+{
+  if (!parse_protocol_list(s))
+    return true;
+  return false;
+}
+
+/**
  * Given a protocol type and version number, return true iff we know
  * how to speak that protocol.
  */
diff --git a/src/or/protover.h b/src/or/protover.h
index 477274e29..c46a13de6 100644
--- a/src/or/protover.h
+++ b/src/or/protover.h
@@ -42,6 +42,7 @@ typedef enum protocol_type_t {
   PRT_CONS,
 } protocol_type_t;
 
+bool protover_contains_long_protocol_names(const char *s);
 int protover_all_supported(const char *s, char **missing);
 int protover_is_supported_here(protocol_type_t pr, uint32_t ver);
 const char *protover_get_supported_protocols(void);





More information about the tor-commits mailing list