tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit da86a70bd8ea6c468ac7e27a53245bbeb9d28b58
parent 7409aa58d18f23d17b03898a4e2b06fba7c2e102
Author: Nick Mathewson <nickm@torproject.org>
Date:   Wed, 10 Oct 2018 09:24:48 -0400

Merge remote-tracking branch 'tor-github/pr/384'

Diffstat:
Achanges/bug27808 | 4++++
Msrc/core/mainloop/connection.c | 9++++++---
2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/changes/bug27808 b/changes/bug27808 @@ -0,0 +1,4 @@ + o Minor bugfixes (networking): + - In retry_listeners_ports() make sure that we're removing + a member of old_conns smartlist at most once. + Fixes bug 27808; bugfix on 0.3.5.1-alpha. diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c @@ -2762,6 +2762,11 @@ retry_listener_ports(smartlist_t *old_conns, const port_cfg_t *found_port = NULL; /* Okay, so this is a listener. Is it configured? */ + /* That is, is it either: 1) exact match - address and port + * pair match exactly between old listener and new port; or 2) + * wildcard match - port matches exactly, but *one* of the + * addresses is wildcard (0.0.0.0 or ::)? + */ SMARTLIST_FOREACH_BEGIN(launch, const port_cfg_t *, wanted) { if (conn->type != wanted->type) continue; @@ -2805,6 +2810,7 @@ retry_listener_ports(smartlist_t *old_conns, SMARTLIST_DEL_CURRENT(launch, wanted); SMARTLIST_DEL_CURRENT(old_conns, conn); + break; } #endif } @@ -2900,9 +2906,6 @@ retry_all_listeners(smartlist_t *new_conns, int close_all_noncontrol) "(replaced by %s:%d)", conn_type_to_string(old_conn->type), old_conn->address, old_conn->port, new_conn->address, new_conn->port); - - tor_free(r); - SMARTLIST_DEL_CURRENT(replacements, r); } SMARTLIST_FOREACH_END(r); #endif