#21415: tor_bug_occurred_: Bug: src/or/entrynodes.c:1845: select_entry_guard_for_circuit: Non-fatal assertion !(!guard_has_descriptor(guard)) failed. -----------------------------+------------------------------------ Reporter: cypherpunks | Owner: nickm Type: defect | Status: needs_review Priority: Medium | Milestone: Tor: 0.3.0.x-final Component: Core Tor/Tor | Version: Tor: 0.3.0.3-alpha Severity: Normal | Resolution: Keywords: review-group-16 | Actual Points: Parent ID: | Points: Reviewer: asn | Sponsor: -----------------------------+------------------------------------
Comment (by asn): I think the bug has been found. Here it is: {{{ const int num_primary = get_n_primary_guards_to_use(GUARD_USAGE_TRAFFIC); ... SMARTLIST_FOREACH_BEGIN(gs->primary_entry_guards, entry_guard_t *, guard) { ... n_considered++; ... if (n_considered >= num_primary) break; } SMARTLIST_FOREACH_END(guard); }}} In the above, it seems like `get_n_primary_guards_to_use()` returns 1 (because of DFLT_N_PRIMARY_GUARDS_TO_USE), and then we only actually check the first primary guard for descriptor and `break` after that. This way it's possible that the second primary guard actually has no descriptor, and if for some reason we end up picking it (e.g. because we picked the first primary guard as the exit node) we will get the assert. What's the right fix here? Maybe to set `num_primary` to `smartlist_len(gs->primary_entry_guards)` and test all guards for descriptors before proceeding? What else? -- Ticket URL: <https://trac.torproject.org/projects/tor/ticket/21415#comment:14> Tor Bug Tracker & Wiki <https://trac.torproject.org/> The Tor Project: anonymity online _______________________________________________ tor-bugs mailing list tor-bugs@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs