Opened 9 months ago

Last modified 5 months ago

#28190 new defect

Hidden service v2 exceeded launch limit with 11 intro points in the last 37 seconds

Reported by: teor Owned by:
Priority: Medium Milestone: Tor: unspecified
Component: Core Tor/Tor Version: Tor: unspecified
Severity: Normal Keywords: regression, tor-hs, 040-deferred-20190220
Cc: asn Actual Points:
Parent ID: Points:
Reviewer: Sponsor:

Description

This looks like a new bug in 0.3.6.0-alpha-dev:

Warning: Hidden service pc66kjzgfsqdlyj5 exceeded launch limit with 11 intro points in the last 37 seconds. Intro circuit launches are limited to 10 per 300 seconds. Number: 1
Warning: Intro point 0 at test006r: circuit is open Number: 1
Warning: Intro point 1 at test005r: no circuit Number: 1
Warning: Intro point 2 at test001a: circuit is open Number: 1
Warning: Intro point 3 at test004r: circuit is open Number: 1

I haven't seen this warning in chutney before.

For details, see:
https://travis-ci.org/teor2345/chutney/jobs/445959016

Child Tickets

Change History (3)

comment:1 Changed 9 months ago by dgoulet

Cc: dgoulet removed
Keywords: tor-hs added

This is actually possible. I've seen that with 4 or 5 intro where 1 or 2 circuits aren't opened and because we launch 3 + 2 intro points and take the first 3 that finishes, you can hit that log warning while having extra intro points inflight for which tor hasn't closed them yet.

In this case, the 4th one still wasn't closed just yet.

It is still unclear why the service would do so many attempts in such a small period of time but in this case it seems the service does has 3 working intro points so the warning comes from this:

    } else if (service->n_intro_circuits_launched >=
               rend_max_intro_circs_per_period(
                                      service->n_intro_points_wanted)) {
      /* We have failed too many times in this period; wait for the next
       * one before we try to initiate any more connections. */
      rend_log_intro_limit(service, LOG_WARN);
      continue;
    }

... where in this case n_intro_circuits_launched = 11 and if n_intro_points_wanted was 0, then we would hit that condition everytime that rend_consider_services_intro_points() is called, which is every second...

It appears to me that we shouldn't even continue in the loop of that function if the service wants *NO* intro point. Just below that warning, there is this snippet of code that should be before I feel like...

    /* Quiescent state, we have more or the equal amount of wanted node for
     * this service. Proceed to the next service. We can have more nodes
     * because we launch extra preemptive circuits if our intro nodes list was
     * originally empty for performance reasons. */
    if (intro_nodes_len >= service->n_intro_points_wanted) {
      continue;
    }

comment:2 Changed 9 months ago by nickm

Milestone: Tor: 0.3.6.x-finalTor: 0.4.0.x-final

Tor 0.3.6.x has been renamed to 0.4.0.x.

comment:3 Changed 5 months ago by nickm

Keywords: 040-deferred-20190220 added
Milestone: Tor: 0.4.0.x-finalTor: unspecified

Deferring 51 tickets from 0.4.0.x-final. Tagging them with 040-deferred-20190220 for visibility. These are the tickets that did not get 040-must, 040-can, or tor-ci.

Note: See TracTickets for help on using tickets.