]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
core/or: Allow IPv6 connections to be canonical
authorteor <teor@torproject.org>
Tue, 14 Apr 2020 02:16:48 +0000 (12:16 +1000)
committerteor <teor@torproject.org>
Tue, 14 Apr 2020 02:16:48 +0000 (12:16 +1000)
Consider IPv6 addresses when checking if a connection is canonical.

In 17604, relays assumed that a remote relay could consider an IPv6
connection canonical, but did not set the canonical flag on their side
of the connection.

Fixes bug 33899; bugfix on 0.3.1.1-alpha.

changes/bug33899 [new file with mode: 0644]
src/core/or/connection_or.c

diff --git a/changes/bug33899 b/changes/bug33899
new file mode 100644 (file)
index 0000000..319df45
--- /dev/null
@@ -0,0 +1,5 @@
+  o Minor bugfixes (IPv6, relay):
+    - Consider IPv6 addresses when checking if a connection is canonical.
+      In 17604, relays assumed that a remote relay could consider an IPv6
+      connection canonical, but did not set the canonical flag on their side
+      of the connection. Fixes bug 33899; bugfix on 0.3.1.1-alpha.
index 6b11f3323250622bd971b8d6d6bf0d7c39159ca1..2eecbc50a7c4e39e5729c3bd228d250c8487317c 100644 (file)
@@ -901,12 +901,14 @@ connection_or_check_canonicity(or_connection_t *conn, int started_here)
   }
 
   if (r) {
-    tor_addr_port_t node_ap;
-    node_get_pref_orport(r, &node_ap);
-    /* XXXX proposal 186 is making this more complex.  For now, a conn
-       is canonical when it uses the _preferred_ address. */
-    if (tor_addr_eq(&conn->base_.addr, &node_ap.addr))
+    tor_addr_port_t node_ipv4_ap;
+    tor_addr_port_t node_ipv6_ap;
+    node_get_prim_orport(r, &node_ipv4_ap);
+    node_get_pref_ipv6_orport(r, &node_ipv6_ap);
+    if (tor_addr_eq(&conn->base_.addr, &node_ipv4_ap.addr) ||
+        tor_addr_eq(&conn->base_.addr, &node_ipv6_ap.addr)) {
       connection_or_set_canonical(conn, 1);
+    }
     if (!started_here) {
       /* Override the addr/port, so our log messages will make sense.
        * This is dangerous, since if we ever try looking up a conn by