aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/channeltls.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-08-08 11:23:59 -0400
committerNick Mathewson <nickm@torproject.org>2019-08-08 11:23:59 -0400
commit0bc5b7ae95a2cc11b380ba09aab0ed1f4219f90b (patch)
tree996f3103dab15e785a1fc99826099053717b21c7 /src/core/or/channeltls.c
parent40d7f1e3a67c7777f44e50e009c313baf686e6b2 (diff)
parent7e32db478b6619c8e25ad117a59361b1f5cdfa48 (diff)
downloadtor-0bc5b7ae95a2cc11b380ba09aab0ed1f4219f90b.tar.gz
tor-0bc5b7ae95a2cc11b380ba09aab0ed1f4219f90b.zip
Merge branch 'ticket31343_040' into maint-0.4.1
Diffstat (limited to 'src/core/or/channeltls.c')
-rw-r--r--src/core/or/channeltls.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/core/or/channeltls.c b/src/core/or/channeltls.c
index 5442cae938..2a6edc951c 100644
--- a/src/core/or/channeltls.c
+++ b/src/core/or/channeltls.c
@@ -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);