From: teor Date: Tue, 14 Apr 2020 02:16:48 +0000 (+1000) Subject: core/or: Allow IPv6 connections to be canonical X-Git-Tag: tor-0.4.5.0-alpha-dev~51^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=41fa07f751aaf50297d3139c440f7fb3ed71338a;p=thirdparty%2Ftor.git core/or: Allow IPv6 connections to be canonical 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. --- diff --git a/changes/bug33899 b/changes/bug33899 new file mode 100644 index 0000000000..319df45dff --- /dev/null +++ b/changes/bug33899 @@ -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. diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c index 6b11f33232..2eecbc50a7 100644 --- a/src/core/or/connection_or.c +++ b/src/core/or/connection_or.c @@ -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