From 3b2f012e28f73267a894c5e3b468c65d8e093b15 Mon Sep 17 00:00:00 2001 From: cypherpunks Date: Fri, 30 Sep 2016 21:49:09 +0000 Subject: [PATCH] Avoid reordering IPv6 interface addresses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When deleting unsuitable addresses in get_interface_address6_list(), to avoid reordering IPv6 interface addresses and keep the order returned by the OS, use SMARTLIST_DEL_CURRENT_KEEPORDER() instead of SMARTLIST_DEL_CURRENT(). This issue was reported by René Mayrhofer. [Closes ticket 20163; changes file written by teor. This paragraph added by nickm] --- changes/20163 | 6 ++++++ src/common/address.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 changes/20163 diff --git a/changes/20163 b/changes/20163 new file mode 100644 index 0000000000..04074ded37 --- /dev/null +++ b/changes/20163 @@ -0,0 +1,6 @@ + o Minor bugfixes (address discovery): + - Stop reordering IP addresses returned by the OS. +This makes is more likely that Tor will guess the same relay IP address every time. +Fixes issue 20163; bugfix on 0.2.7.1-alpha, ticket 17027. +Reported by René Mayrhofer, patch by "cypherpunks". + diff --git a/src/common/address.c b/src/common/address.c index 6799dd6c56..15ee3dbd17 100644 --- a/src/common/address.c +++ b/src/common/address.c @@ -1770,13 +1770,13 @@ MOCK_IMPL(smartlist_t *,get_interface_address6_list,(int severity, { if (tor_addr_is_loopback(a) || tor_addr_is_multicast(a)) { - SMARTLIST_DEL_CURRENT(addrs, a); + SMARTLIST_DEL_CURRENT_KEEPORDER(addrs, a); tor_free(a); continue; } if (!include_internal && tor_addr_is_internal(a, 0)) { - SMARTLIST_DEL_CURRENT(addrs, a); + SMARTLIST_DEL_CURRENT_KEEPORDER(addrs, a); tor_free(a); continue; }