summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-04-08guard: Don't check bridge transport name when selecting eligible guardsDavid Goulet
This is related to ticket #40360 which found this problem when a Bridge entry with a transport name (let say obfs4) is set without a fingerprint: Bridge obfs4 <IP>:<PORT> cert=<...> iat-mode=0 (Notice, no fingerprint between PORT and "cert=") Problem: commit 09c6d0324626ffa349c7eed66d9ede92ecd71583 added a check in get_sampled_guard_for_bridge() that would return NULL if the selected bridge did not have a valid transport name (that is the Bridge transport name that corresponds to a ClientTransportPlugin). Unfortuantely, this function is also used when selecting our eligible guards which is done *before* the transport list is populated and so the added check for the bridge<->transport name is querying an empty list of transports resulting in always returning NULL. For completion, the logic is: Pick eligible guards (use bridge(s) if need be) then for those, initiate a connection to the pluggable transport proxy and then populate the transport list once we've connected. Back to get_sampled_guard_for_bridge(). As said earlier, it is used when selecting our eligible guards in a way that prevents us from selecting duplicates. In other words, if that function returns non-NULL, the selection continues considering the bridge was sampled before. But if it returns NULL, the relay is added to the eligible list. This bug made it that our eligible guard list was populated with the *same* bridge 3 times like so (remember no fingerprint): [info] entry_guards_update_primary(): Primary entry guards have changed. New primary guard list is: [info] entry_guards_update_primary(): 1/3: [bridge] ($0000000000000000000000000000000000000000) [info] entry_guards_update_primary(): 2/3: [bridge] ($0000000000000000000000000000000000000000) [info] entry_guards_update_primary(): 3/3: [bridge] ($0000000000000000000000000000000000000000) When tor starts, it will find the bridge fingerprint by connecting to it and will then update the primary guard list by calling entry_guard_learned_bridge_identity() which then goes and update only 1 single entry resulting in this list: [debug] sampled_guards_update_consensus_presence(): Sampled guard [bridge] ($<FINGERPRINT>) is still listed. [debug] sampled_guards_update_consensus_presence(): Sampled guard [bridge] ($0000000000000000000000000000000000000000) is still listed. [debug] sampled_guards_update_consensus_presence(): Sampled guard [bridge] ($0000000000000000000000000000000000000000) is still listed. And here lies the problem, now tor is stuck attempting to wait for a valid descriptor for at least 2 guards where the second one is a bunch of zeroes and thus tor will never fully bootstraps: [info] I learned some more directory information, but not enough to build a circuit: We're missing descriptors for 1/2 of our primary entry guards (total microdescriptors: 6671/6703). That's ok. We will try to fetch missing descriptors soon. Now, why passing the fingerprint then works? This is because the list of guards contains 3 times the same bridge but they all have a fingerprint and so the descriptor can be found and tor can bootstraps. The solution here is to entirely remove the transport name check in get_sampled_guard_for_bridge() since the transport_list is empty at that point. That way, the eligible guard list only gets 1 entry, the bridge, and can then go on to bootstrap properly. It is OK to do so since when launching a bridge descriptor fetch, we validate that the bridge transport name is OK and thus avoid connecting to a bridge without a ClientTransportPlugin. If we wanted to keep the check in place, we would need to populate the transport_list much earlier and this would require a much bigger refactoring. Fixes #40360 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-03-26Fix glob processing on BSD systems. #40318Daniel Pinto
On Linux systems, glob automatically ignores the errors ENOENT and ENOTDIR because they are expected during glob expansion. But BSD systems do not ignore these, resulting in glob failing when globs expand to invalid paths. This is fixed by adding a custom error handler that ignores only these two errors and removing the GLOB_ERR flag as it makes glob fail even if the error handler ignores the error and is unnecessary as the error handler will make glob fail on all other errors anyway.
2021-03-24Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-03-23channel: Fix use after free in channel_do_open_actions()David Goulet
Fortunately, our tor_free() is setting the variable to NULL after so we were in a situation where NULL was always used instead of the transport name. This first appeared in 894ff2dc8422cb86312c512698acd76476224f87 and results in basically no bridge with a transport being able to use DoS defenses. Fixes #40345 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-03-17Merge remote-tracking branch 'tor-gitlab/mr/333' into maint-0.4.5George Kadianakis
2021-03-16Bump version to 0.4.5.7-devNick Mathewson
2021-03-16Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
"ours" to avoid version bump.
2021-03-16Bump version to 0.4.4.8-devNick Mathewson
2021-03-16Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
"ours" to avoid version bump.
2021-03-16Bump to 0.3.5.14-devNick Mathewson
2021-03-15Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-03-15Remove check-best-practices from check-local in 0.4.4Nick Mathewson
2021-03-15Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-03-15Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
2021-03-15Merge branch 'bug40316_035_v2' into maint-0.3.5Nick Mathewson
2021-03-15Fix detection of point to insert signatures on a pending consensus.Nick Mathewson
We were looking for the first instance of "directory-signature " when instead the correct behavior is to look for the first instance of "directory-signature " at the start of a line. Unfortunately, this can be exploited as to crash authorities while they're voting. Fixes #40316; bugfix on 0.2.2.4-alpha. This is TROVE-2021-002, also tracked as CVE-2021-28090.
2021-03-15Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-03-15Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
2021-03-15Clarify new intended strategy with TROVE-2021-001Nick Mathewson
We're going to disable this feature in all versions for now.
2021-03-15Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-03-15Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
2021-03-15Merge branch 'bug40286_disable_min_035' into maint-0.3.5Nick Mathewson
2021-03-15Bump to 0.4.5.7Nick Mathewson
2021-03-15Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
"ours" to avoid version bump.
2021-03-15Bump to 0.4.4.8Nick Mathewson
2021-03-15Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
"ours" to avoid version bump.
2021-03-15Bump to 0.3.5.14Nick Mathewson
2021-03-12Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-03-12Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
2021-03-12Remove maxmind license; add ipfire location database license (cc by-sa 4.0)Nick Mathewson
2021-03-12Use the right ticket number.Nick Mathewson
2021-03-12Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-03-12Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
2021-03-12update geoip-2021-03-12 to mention provider transition.Nick Mathewson
2021-03-12Update geoip files to match ipfire location db, 2021/03/12.Nick Mathewson
2021-03-10Merge remote-tracking branch 'tor-gitlab/mr/335' into maint-0.4.5Nick Mathewson
2021-03-10Merge branch 'tor-gitlab/mr/331' into maint-0.4.5David Goulet
2021-03-10hs: Remove hamrless BUG() that can happenDavid Goulet
When reloading a service, we can re-register a service and thus end up again in the metrics store initialization code path which is fine. No need to BUG() anymore. Fixes #40334 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-03-08Don't warn about missing guard state if controller picked first hopNick Mathewson
See comments about why this needs a new flag and we can't just use CIRCUIT_PURPOSE_CONTROLLER. Fixes #40285; bugfix on 0.3.2.1-alpha.
2021-03-08Fix documentation formatting for VirtualAddrNetworkIPv6Nick Mathewson
Fixes bug #40256; bugfix on 0.2.9.4-alpha.
2021-03-03Fix parsing bug in linux get_total_system_memory().Nick Mathewson
Use find_str_at_start_of_line(), not strstr() here: we don't want to match "MemTotal: " if it appears in the middle of a line. Fixes #40315; bugfix on 0.2.5.4-alpha.
2021-03-01Merge branch 'maint-0.4.4' into maint-0.4.5David Goulet
2021-03-01Merge branch 'maint-0.3.5' into maint-0.4.4David Goulet
2021-02-24Merge branch 'tor-gitlab/mr/321' into maint-0.4.5David Goulet
2021-02-23Merge branch 'tor-gitlab/mr/326' into maint-0.4.5David Goulet
2021-02-23Remove mallinfo() from codebaseDavid Goulet
Now deprecated in libc >= 2.33 Closes #40309 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-02-23Remove mallinfo() from codebaseDavid Goulet
Now deprecated in libc >= 2.33 Closes #40309 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-02-23relay: Avoid a directory early fetchDavid Goulet
The directory_fetches_from_authorities() is used to know if a client or relay should fetch data from an authority early in the boot process. We had a condition in that function that made a relay trigger that fetch if it didn't know its address (so we can learn it). However, when this is called, the address discovery has not been done yet so it would always return true for a relay. Furthermore, it would always trigger a log notice that the IPv4 couldn't be found which was inevitable because the address discovery process has not been done yet (done when building our first descriptor). It is also important to point out that starting in 0.4.5.1-alpha, asking an authority for an address is done during address discovery time using a one-hop circuit thus independent from the relay deciding to fetch or not documents from an authority. Small fix also is to reverse the "IPv(4|6)Only" flag in the notice so that if we can't find IPv6 it would output to use IPv4Only. Fixes #40300 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-02-22Merge remote-tracking branch 'tor-gitlab/mr/316' into maint-0.4.5Nick Mathewson
2021-02-22Merge remote-tracking branch 'tor-gitlab/mr/309' into maint-0.4.5Alexander Færøy