mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
Merge branch 'maint-0.4.1'
This commit is contained in:
commit
a8f936c817
9
changes/bug31343
Normal file
9
changes/bug31343
Normal 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.
|
@ -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
|
* This function is called to handle an incoming NETINFO cell; read and act
|
||||||
* on its contents, and set the connection state to "open".
|
* 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);
|
time_t now = time(NULL);
|
||||||
const routerinfo_t *me = router_get_my_routerinfo();
|
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;
|
tor_addr_t my_apparent_addr = TOR_ADDR_NULL;
|
||||||
int started_here = 0;
|
int started_here = 0;
|
||||||
const char *identity_digest = NULL;
|
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_type = netinfo_addr_get_addr_type(my_addr);
|
||||||
my_addr_len = netinfo_addr_get_len(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;
|
apparent_skew = now - timestamp;
|
||||||
}
|
}
|
||||||
/* We used to check:
|
/* We used to check:
|
||||||
@ -1842,7 +1854,7 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan)
|
|||||||
/* Act on apparent skew. */
|
/* Act on apparent skew. */
|
||||||
/** Warn when we get a netinfo skew with at least this value. */
|
/** Warn when we get a netinfo skew with at least this value. */
|
||||||
#define NETINFO_NOTICE_SKEW 3600
|
#define NETINFO_NOTICE_SKEW 3600
|
||||||
if (labs(apparent_skew) > NETINFO_NOTICE_SKEW &&
|
if (time_abs(apparent_skew) > NETINFO_NOTICE_SKEW &&
|
||||||
(started_here ||
|
(started_here ||
|
||||||
connection_or_digest_is_known_relay(chan->conn->identity_digest))) {
|
connection_or_digest_is_known_relay(chan->conn->identity_digest))) {
|
||||||
int trusted = router_digest_is_trusted_dir(chan->conn->identity_digest);
|
int trusted = router_digest_is_trusted_dir(chan->conn->identity_digest);
|
||||||
|
@ -2861,7 +2861,7 @@ int
|
|||||||
router_differences_are_cosmetic(const routerinfo_t *r1, const routerinfo_t *r2)
|
router_differences_are_cosmetic(const routerinfo_t *r1, const routerinfo_t *r2)
|
||||||
{
|
{
|
||||||
time_t r1pub, r2pub;
|
time_t r1pub, r2pub;
|
||||||
long time_difference;
|
time_t time_difference;
|
||||||
tor_assert(r1 && r2);
|
tor_assert(r1 && r2);
|
||||||
|
|
||||||
/* r1 should be the one that was published first. */
|
/* r1 should be the one that was published first. */
|
||||||
@ -2925,7 +2925,9 @@ router_differences_are_cosmetic(const routerinfo_t *r1, const routerinfo_t *r2)
|
|||||||
* give or take some slop? */
|
* give or take some slop? */
|
||||||
r1pub = r1->cache_info.published_on;
|
r1pub = r1->cache_info.published_on;
|
||||||
r2pub = r2->cache_info.published_on;
|
r2pub = r2->cache_info.published_on;
|
||||||
time_difference = labs(r2->uptime - (r1->uptime + (r2pub - r1pub)));
|
time_difference = r2->uptime - (r1->uptime + (r2pub - r1pub));
|
||||||
|
if (time_difference < 0)
|
||||||
|
time_difference = - time_difference;
|
||||||
if (time_difference > ROUTER_ALLOW_UPTIME_DRIFT &&
|
if (time_difference > ROUTER_ALLOW_UPTIME_DRIFT &&
|
||||||
time_difference > r1->uptime * .05 &&
|
time_difference > r1->uptime * .05 &&
|
||||||
time_difference > r2->uptime * .05)
|
time_difference > r2->uptime * .05)
|
||||||
|
Loading…
Reference in New Issue
Block a user