mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Clip invalid path bias counts at startup.
There was a bug in Tor prior to 0.2.4.10-alpha that allowed counts to become invalid. Clipping the counts at startup allows us to rule out log messages due to corruption from these prior Tor versions.
This commit is contained in:
parent
856d57531b
commit
2b05a8c671
@ -1211,6 +1211,21 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (use_cnt < success_cnt) {
|
||||||
|
int severity = LOG_INFO;
|
||||||
|
/* If this state file was written by a Tor that would have
|
||||||
|
* already fixed it, then the overcounting bug is still there.. */
|
||||||
|
if (tor_version_as_new_as(state_version, "0.2.4.12-alpha")) {
|
||||||
|
severity = LOG_NOTICE;
|
||||||
|
}
|
||||||
|
log_fn(severity, LD_BUG,
|
||||||
|
"State file contains unexpectedly high usage success "
|
||||||
|
"counts %lf/%lf for Guard %s ($%s)",
|
||||||
|
success_cnt, use_cnt,
|
||||||
|
node->nickname, hex_str(node->identity, DIGEST_LEN));
|
||||||
|
success_cnt = use_cnt;
|
||||||
|
}
|
||||||
|
|
||||||
node->use_attempts = use_cnt;
|
node->use_attempts = use_cnt;
|
||||||
node->use_successes = success_cnt;
|
node->use_successes = success_cnt;
|
||||||
|
|
||||||
@ -1261,6 +1276,21 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg)
|
|||||||
unusable = 0;
|
unusable = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hop_cnt < success_cnt) {
|
||||||
|
int severity = LOG_INFO;
|
||||||
|
/* If this state file was written by a Tor that would have
|
||||||
|
* already fixed it, then the overcounting bug is still there.. */
|
||||||
|
if (tor_version_as_new_as(state_version, "0.2.4.12-alpha")) {
|
||||||
|
severity = LOG_NOTICE;
|
||||||
|
}
|
||||||
|
log_fn(severity, LD_BUG,
|
||||||
|
"State file contains unexpectedly high success counts "
|
||||||
|
"%lf/%lf for Guard %s ($%s)",
|
||||||
|
success_cnt, hop_cnt,
|
||||||
|
node->nickname, hex_str(node->identity, DIGEST_LEN));
|
||||||
|
success_cnt = hop_cnt;
|
||||||
|
}
|
||||||
|
|
||||||
node->circ_attempts = hop_cnt;
|
node->circ_attempts = hop_cnt;
|
||||||
node->circ_successes = success_cnt;
|
node->circ_successes = success_cnt;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user