Merge remote-tracking branch 'teor/bug20613' into maint-0.2.9

This commit is contained in:
Nick Mathewson 2016-11-10 09:10:55 -05:00
commit e8e7a8f3db
2 changed files with 23 additions and 1 deletions

6
changes/bug20613 Normal file
View File

@ -0,0 +1,6 @@
o Minor bugfixes (single onion services, Tor2web):
- Stop logging long-term one-hop circuits deliberately created by single
onion services and Tor2web. These log messages are intended to diagnose
issue 8387, which relates to circuits hanging around forever for no
reason.
Fixes bug 20613; bugfix on 0.2.9.1-alpha. Reported by "pastly".

View File

@ -788,6 +788,8 @@ static time_t last_expired_clientside_circuits = 0;
* As a diagnostic for bug 8387, log information about how many one-hop
* circuits we have around that have been there for at least <b>age</b>
* seconds. Log a few of them.
* Ignores Single Onion Service intro and Tor2web redezvous circuits, they are
* expected to be long-term one-hop circuits.
*/
void
circuit_log_ancient_one_hop_circuits(int age)
@ -797,6 +799,7 @@ circuit_log_ancient_one_hop_circuits(int age)
time_t cutoff = now - age;
int n_found = 0;
smartlist_t *log_these = smartlist_new();
const or_options_t *options = get_options();
SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) {
const origin_circuit_t *ocirc;
@ -804,6 +807,19 @@ circuit_log_ancient_one_hop_circuits(int age)
continue;
if (circ->timestamp_created.tv_sec >= cutoff)
continue;
/* Single Onion Services deliberately make long term one-hop intro
* connections. We only ignore active intro point connections, if we take
* a long time establishing, that's worth logging. */
if (rend_service_allow_non_anonymous_connection(options) &&
circ->purpose == CIRCUIT_PURPOSE_S_INTRO)
continue;
/* Tor2web deliberately makes long term one-hop rend connections,
* particularly when Tor2webRendezvousPoints is used. We only ignore
* active rend point connections, if we take a long time to rendezvous,
* that's worth logging. */
if (rend_client_allow_non_anonymous_connection(options) &&
circ->purpose == CIRCUIT_PURPOSE_C_REND_JOINED)
continue;
ocirc = CONST_TO_ORIGIN_CIRCUIT(circ);
if (ocirc->build_state && ocirc->build_state->onehop_tunnel) {
@ -839,7 +855,7 @@ circuit_log_ancient_one_hop_circuits(int age)
tor_asprintf(&dirty, "Dirty since %s (%ld seconds vs %ld-second cutoff)",
dirty_since, (long)(now - circ->timestamp_dirty),
(long) get_options()->MaxCircuitDirtiness);
(long) options->MaxCircuitDirtiness);
} else {
dirty = tor_strdup("Not marked dirty");
}