Merge branch 'ticket31343_035' into ticket31343_040

This commit is contained in:
Nick Mathewson 2019-08-06 11:18:40 -04:00
commit 79569d86b3
2 changed files with 25 additions and 4 deletions

9
changes/bug31343 Normal file
View File

@ -0,0 +1,9 @@
o Minor bugfixes (compilation):
- Avoid using labs() on time_t, which can cause compilation warnings
on 64-bit Windows builds. Fixes bug 31343; bugfix on 0.2.4.4-alpha.
o Minor bugfixes (clock skew detection):
- Don't believe clock skew results from NETINFO cells that appear to
arrive before the VERSIONS cells they are responding to were sent.
Previously, we would accept them up to 3 minutes "in the past".
Fixes bug 31343; bugfix on 0.2.4.4-alpha.

View File

@ -1664,7 +1664,19 @@ tor_addr_from_netinfo_addr(tor_addr_t *tor_addr,
}
/**
* Process a 'netinfo' cell.
* Helper: compute the absolute value of a time_t.
*
* (we need this because labs() doesn't always work for time_t, since
* long can be shorter than time_t.)
*/
static inline time_t
time_abs(time_t val)
{
return (val < 0) ? -val : val;
}
/**
* Process a 'netinfo' cell
*
* This function is called to handle an incoming NETINFO cell; read and act
* on its contents, and set the connection state to "open".
@ -1679,7 +1691,7 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan)
time_t now = time(NULL);
const routerinfo_t *me = router_get_my_routerinfo();
long apparent_skew = 0;
time_t apparent_skew = 0;
tor_addr_t my_apparent_addr = TOR_ADDR_NULL;
int started_here = 0;
const char *identity_digest = NULL;
@ -1765,7 +1777,7 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan)
my_addr_type = netinfo_addr_get_addr_type(my_addr);
my_addr_len = netinfo_addr_get_len(my_addr);
if (labs(now - chan->conn->handshake_state->sent_versions_at) < 180) {
if ((now - chan->conn->handshake_state->sent_versions_at) < 180) {
apparent_skew = now - timestamp;
}
/* We used to check:
@ -1842,7 +1854,7 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan)
/* Act on apparent skew. */
/** Warn when we get a netinfo skew with at least this value. */
#define NETINFO_NOTICE_SKEW 3600
if (labs(apparent_skew) > NETINFO_NOTICE_SKEW &&
if (time_abs(apparent_skew) > NETINFO_NOTICE_SKEW &&
(started_here ||
connection_or_digest_is_known_relay(chan->conn->identity_digest))) {
int trusted = router_digest_is_trusted_dir(chan->conn->identity_digest);