aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2019-11-25 12:33:14 +1000
committerteor <teor@torproject.org>2019-11-25 12:33:14 +1000
commit83424cb62f19ee09cba769a6c9a8cc94fc3c4cb7 (patch)
tree04d00bb7ff9f69a33b3d306960af1902f791a77f
parentf9812ee5f7336bac9caaf57946e46cd19dfaf0be (diff)
parent984a28f3e502c6df9e28057c3e934b98df83d8e9 (diff)
downloadtor-83424cb62f19ee09cba769a6c9a8cc94fc3c4cb7.tar.gz
tor-83424cb62f19ee09cba769a6c9a8cc94fc3c4cb7.zip
Merge remote-tracking branch 'tor-github/pr/1395' into maint-0.3.5
-rw-r--r--changes/ticket315487
-rw-r--r--src/feature/hs/hs_service.c9
2 files changed, 16 insertions, 0 deletions
diff --git a/changes/ticket31548 b/changes/ticket31548
new file mode 100644
index 0000000000..fef0b5d01f
--- /dev/null
+++ b/changes/ticket31548
@@ -0,0 +1,7 @@
+ o Major bugfixes (hidden service v3):
+ - Make onion service always use the exact amount of configured intro points
+ (or less due to node exlusion). Before, a service could sometimes pick
+ more intro points than configured with the
+ HiddenServiceNumIntroductionPoints option. Fixes bug 31548; bugfix on
+ 0.3.2.1-alpha.
+
diff --git a/src/feature/hs/hs_service.c b/src/feature/hs/hs_service.c
index b05f20366f..7e150599fc 100644
--- a/src/feature/hs/hs_service.c
+++ b/src/feature/hs/hs_service.c
@@ -1686,6 +1686,15 @@ build_desc_intro_points(const hs_service_t *service,
DIGEST256MAP_FOREACH(desc->intro_points.map, key,
const hs_service_intro_point_t *, ip) {
+ if (!ip->circuit_established) {
+ /* Ignore un-established intro points. They can linger in that list
+ * because their circuit has not opened and they haven't been removed
+ * yet even though we have enough intro circuits.
+ *
+ * Due to #31561, it can stay in that list until rotation so this check
+ * prevents to publish an intro point without a circuit. */
+ continue;
+ }
hs_desc_intro_point_t *desc_ip = hs_desc_intro_point_new();
if (setup_desc_intro_point(&desc->signing_kp, ip, now, desc_ip) < 0) {
hs_desc_intro_point_free(desc_ip);