]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
vote: TROVE-2018-005 Make DirAuths omit misbehaving routers from their vote.
authorIsis Lovecruft <isis@torproject.org>
Mon, 7 May 2018 23:59:06 +0000 (23:59 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 22 May 2018 16:13:41 +0000 (12:13 -0400)
src/or/dirserv.c
src/or/protover.c
src/or/protover.h

index 95bef9889d610400fd3784ed744c9a3d335e4ad4..68df1c4676bfbb46e3f05c722ea4acfb19f60ef6 100644 (file)
@@ -2943,6 +2943,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;
index 24b3813614355340fef7da1d84debe2623daece7..94e6b11c46673a4fc01750166c6a04faae931816 100644 (file)
@@ -273,6 +273,18 @@ parse_protocol_list(const char *s)
   return NULL;
 }
 
+/**
+ * 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.
index 657977279ef00a730ba5841ae82415327472d59a..8b2db85d772cf25d488bf30422d7aa2ad47bc5dc 100644 (file)
@@ -38,6 +38,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);