[tor-commits] [tor/master] In routers_make_ed_keys_unique, break ties for published_on
nickm at torproject.org
nickm at torproject.org
Mon Mar 21 17:27:36 UTC 2016
commit b24f15a9a16acc8009c25823a127f3090b9b2edc
Author: Nick Mathewson <nickm at torproject.org>
Date: Tue Mar 15 10:34:05 2016 -0400
In routers_make_ed_keys_unique, break ties for published_on
This ensures that if we can't use published_on to decide an ed,rsa
mapping, we at least decide deterministically.
Resolves 17668.T3
---
src/or/dirserv.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index ab8ddfe..ae67e8e 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -2124,7 +2124,8 @@ get_possible_sybil_list(const smartlist_t *routers)
}
/** If there are entries in <b>routers</b> with exactly the same ed25519 keys,
- * remove the older one. May alter the order of the list. */
+ * remove the older one. If they are exactly the same age, remove the one
+ * with the greater descriptor digest. May alter the order of the list. */
static void
routers_make_ed_keys_unique(smartlist_t *routers)
{
@@ -2139,7 +2140,12 @@ routers_make_ed_keys_unique(smartlist_t *routers)
if ((ri2 = digest256map_get(by_ed_key, pk))) {
/* Duplicate; must omit one. Set the omit_from_vote flag in whichever
* one has the earlier published_on. */
- if (ri2->cache_info.published_on < ri->cache_info.published_on) {
+ const time_t ri_pub = ri->cache_info.published_on;
+ const time_t ri2_pub = ri2->cache_info.published_on;
+ if (ri2_pub < ri_pub ||
+ (ri2_pub == ri_pub &&
+ memcmp(ri->cache_info.signed_descriptor_digest,
+ ri2->cache_info.signed_descriptor_digest,DIGEST_LEN)<0)) {
digest256map_set(by_ed_key, pk, ri);
ri2->omit_from_vote = 1;
} else {
More information about the tor-commits
mailing list