mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 14:51:11 +01:00
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
This commit is contained in:
parent
beef6ed451
commit
b24f15a9a1
1 changed files with 8 additions and 2 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue