When making sure digest256 matches in ei, look at sd, not ri.

The routerinfo we pass to routerinfo_incompatible_with_extrainfo is
the latest routerinfo for the relay.  The signed_descriptor_t, on
the other hand, is the signed_descriptor_t that corresponds to the
extrainfo.  That means we should be checking the digest256 match
with that signed_descriptor_t, not with the routerinfo.

Fixes bug 17150 (and 19017); bugfix on 0.2.7.2-alpha.
This commit is contained in:
Nick Mathewson 2016-05-17 12:57:03 -04:00
parent 44da47d3c1
commit 7d1eb0d570
2 changed files with 8 additions and 2 deletions

6
changes/bug17150 Normal file
View File

@ -0,0 +1,6 @@
o Minor bugfixes (directory warnings):
- When fetching extrainfo documents, compare their SHA256 digests
with the routerinfo that led us to fetch them, rather than
with the most recent routerinfo. Otherwise we generate many
spurious warnings about mismatches. Fixes bug 17150; bugfix
on 0.2.7.2-alpha.

View File

@ -4926,9 +4926,9 @@ routerinfo_incompatible_with_extrainfo(const routerinfo_t *ri,
/* Set digest256_matches to 1 if the digest is correct, or if no
* digest256 was in the ri. */
digest256_matches = tor_memeq(ei->digest256,
ri->cache_info.extra_info_digest256, DIGEST256_LEN);
sd->extra_info_digest256, DIGEST256_LEN);
digest256_matches |=
tor_mem_is_zero(ri->cache_info.extra_info_digest256, DIGEST256_LEN);
tor_mem_is_zero(sd->extra_info_digest256, DIGEST256_LEN);
/* The identity must match exactly to have been generated at the same time
* by the same router. */