tor

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

commit 0c8f901ee7c3cfd2351e7f6e723998226fabe190
parent 6bdfaa8b244ca3e10e57f6d99616af1d5f68fa67
Author: Nick Mathewson <nickm@torproject.org>
Date:   Wed, 11 Apr 2018 10:48:46 -0400

Merge branch 'maint-0.3.3'

Diffstat:
Achanges/bug24989 | 4++++
Msrc/or/circuituse.c | 2+-
Msrc/or/or.h | 8++++++++
3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/changes/bug24989 b/changes/bug24989 @@ -0,0 +1,4 @@ + o Minor bugfixes (hidden services): + - Re-instate counting pending client HSDir fetch circuits against the + MaxClientCircuitsPending rate limit. Fixes bug 24989; bugfix on + 0.3.3.0-alpha-dev. diff --git a/src/or/circuituse.c b/src/or/circuituse.c @@ -383,7 +383,7 @@ count_pending_general_client_circuits(void) SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) { if (circ->marked_for_close || circ->state == CIRCUIT_STATE_OPEN || - circ->purpose != CIRCUIT_PURPOSE_C_GENERAL || + !CIRCUIT_PURPOSE_COUNTS_TOWARDS_MAXPENDING(circ->purpose) || !CIRCUIT_IS_ORIGIN(circ)) continue; diff --git a/src/or/or.h b/src/or/or.h @@ -586,6 +586,14 @@ typedef enum { /** True iff the circuit_t c is actually an or_circuit_t */ #define CIRCUIT_IS_ORCIRC(c) (((circuit_t *)(c))->magic == OR_CIRCUIT_MAGIC) +/** True iff this circuit purpose should count towards the global + * pending rate limit (set by MaxClientCircuitsPending). We count all + * general purpose circuits, as well as the first step of client onion + * service connections (HSDir gets). */ +#define CIRCUIT_PURPOSE_COUNTS_TOWARDS_MAXPENDING(p) \ + ((p) == CIRCUIT_PURPOSE_C_GENERAL || \ + (p) == CIRCUIT_PURPOSE_C_HSDIR_GET) + /** How many circuits do we want simultaneously in-progress to handle * a given stream? */ #define MIN_CIRCUITS_HANDLING_STREAM 2