aboutsummaryrefslogtreecommitdiff
path: root/src/feature
AgeCommit message (Collapse)Author
2022-02-03hs: Double quote the metrics label valueDavid Goulet
Fixes #40552 Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-01-18Merge branch 'maint-0.3.5' into maint-0.4.5David Goulet
2022-01-18Update new relay blogpost URLJérôme Charaoui
This removes the '/blog/' URL component which relies on a redirection since the blog has been migrated to Lektor
2021-11-05protover: Fix merge forward from 035David Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-11-05Merge branch 'maint-0.3.5' into maint-0.4.5David Goulet
2021-11-05protover: Move all hardcoded lists in one placeDavid Goulet
This also moves the warnings and add some theatrical effect around the code so anyone modifying those list should notice the warnings signs and read the comment accordingly. Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-11-05Add scary warnings about changing the protover list.Nick Mathewson
Doing this in the wrong way has potential to cause serious havoc on the network, so let's make it harder for future programmers to mess it up.
2021-11-03relay: Don't allow DirPort on non-IPv4David Goulet
Our code doesn't allow it and so this prevents an assert() crash if the DirPort is for instance IPv6 only. Fixes #40494 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-10-28Fix compilation on systems with older compilers.Alexander Færøy
This patch fixes a build error with GCC 7.x which doesn't seem to accept const int's as constants in macro initialization. See: tpo/core/tor#40410
2021-10-21Merge remote-tracking branch 'tor-gitlab/mr/338' into maint-0.4.5Alexander Færøy
2021-10-20Merge branch 'maint-0.3.5' into maint-0.4.5Alexander Færøy
2021-10-20Announce URL to bridge status page when starting Tor as a bridge relay.Alexander Færøy
This patch makes Tor announce the relay specific bridge status page URL when Tor is starting up before bootstrap occours. See: tor#30477
2021-10-20Merge branch 'maint-0.3.5' into maint-0.4.5Alexander Færøy
2021-10-20Remove unused function: dns_randfn_() in dns.c.Alexander Færøy
This patch unbreaks the current build after tor!369 landed. See: https://bugs.torproject.org/tpo/core/tor/40371
2021-10-20Merge remote-tracking branch 'tor-gitlab/mr/369' into maint-0.3.5Alexander Færøy
2021-10-19hs: Improve warning for bad service versionDavid Goulet
Now that we don't have version 2, it gives us: [warn] HiddenServiceVersion must be between 3 and 3, not 2. This commit changes it to: [warn] HiddenServiceVersion must be 3, not 2. Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-10-19hs: Improve warning for bad service versionDavid Goulet
Now that we don't have version 2, it gives us: [warn] HiddenServiceVersion must be between 3 and 3, not 2. This commit changes it to: [warn] HiddenServiceVersion must be 3, not 2. Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-10-19hs-v2: Disable version 2 HSPOST and HSFETCH commandDavid Goulet
Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-10-19hs-v2: Disable version 2 directoryDavid Goulet
Relay do not accept both stores and lookups of version 2 descriptor. This effectively disable version 2 HSDir supports for relays. Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-10-19hs-v2: Disable version 2 introduction pointDavid Goulet
Upon receiving a v2 introduction request, the relay will close the circuit and send back a tor protocol error. Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-10-19hs-v2: Disable version 2 serviceDavid Goulet
The minimum service version is raised from 2 to 3 which effectively disable loading or creating an onion service v2. As for ADD_ONION, for version 2, a 551 error is returned: "551 Failed to add Onion Service" Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-10-06Merge branch 'tor-gitlab/mr/392' into maint-0.4.5David Goulet
2021-10-06Merge branch 'tor-gitlab/mr/393' into maint-0.4.5David Goulet
2021-09-30hs-v2: Disable version 2 HSPOST and HSFETCH commandDavid Goulet
Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-09-30hs-v2: Disable version 2 directoryDavid Goulet
Relay do not accept both stores and lookups of version 2 descriptor. This effectively disable version 2 HSDir supports for relays. Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-09-30hs-v2: Disable version 2 introduction pointDavid Goulet
Upon receiving a v2 introduction request, the relay will close the circuit and send back a tor protocol error. Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-09-30hs-v2: Disable version 2 serviceDavid Goulet
The minimum service version is raised from 2 to 3 which effectively disable loading or creating an onion service v2. As for ADD_ONION, for version 2, a 551 error is returned: "551 Failed to add Onion Service" Part of #40476 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-08-17dir: Do not flag non-running failing HSDirDavid Goulet
When a directory request fails, we flag the relay as non Running so we don't use it anymore. This can be problematic with onion services because there are cases where a tor instance could have a lot of services, ephemeral ones, and keeps failing to upload descriptors, let say due to a bad network, and thus flag a lot of nodes as non Running which then in turn can not be used for circuit building. This commit makes it that we never flag nodes as non Running on a onion service directory request (upload or fetch) failure as to keep the hashring intact and not affect other parts of tor. Fortunately, the onion service hashring is _not_ selected by looking at the Running flag but since we do a 3-hop circuit to the HSDir, other services on the same instance can influence each other by removing nodes from the consensus for path selection. This was made apparent with a small network that ran out of nodes to used due to rapid succession of onion services uploading and failing. See #40434 for details. Fixes #40434 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-08-11relay: Reduce streaming compression ratio from HIGH to LOWDavid Goulet
Fixes #40301 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-08-11relay: Reduce streaming compression ratio from HIGH to LOWDavid Goulet
Fixes #40301 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-06-10Merge branch 'maint-0.4.4' into maint-0.4.5Nick Mathewson
2021-06-10Merge branch 'maint-0.3.5' into maint-0.4.4Nick Mathewson
2021-06-10Fix TROVE-2021-006: Out-of-bounds read on v3 desc parsingGeorge Kadianakis
2021-05-27Upgrade and rate-limit compression failure message.Nick Mathewson
Without this message getting logged at 'WARN', it's hard to contextualize the messages we get about compression bombs, so this message should fix #40175. I'm rate-limiting this, however, since it _could_ get spammy if somebody on the network starts acting up. (Right now it should be very quiet; I've asked Sebastian to check it, and he says that he doesn't hit this message in practice.) Closes #40175.
2021-05-26Prefer mmap()ed consensus files over cached_dir_t entries.Nick Mathewson
Cached_dir_t is a somewhat "legacy" kind of storage when used for consensus documents, and it appears that there are cases when changing our settings causes us to stop updating those entries. This can cause trouble, as @arma found out in #40375, where he changed his settings around, and consensus diff application got messed up: consensus diffs were being _requested_ based on the latest consensus, but were being (incorrectly) applied to a consensus that was no longer the latest one. This patch is a minimal fix for backporting purposes: it has Tor do the same search when applying consensus diffs as we use to request them. This should be sufficient for correct behavior. There's a similar case in GETINFO handling; I've fixed that too. Fixes #40375; bugfix on 0.3.1.1-alpha.
2021-05-11Ignore MAX_BANDWIDTH_CHANGE_FREQ on testing networks.Nick Mathewson
Part of the ever-growing 40337 fix.
2021-05-11Make MinTimeToReportBandwidth a testing-only option (and rename it)Nick Mathewson
2021-04-21hs: Fix memory leak in client cacheDavid Goulet
Fixes #40356 Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-04-16Stop calling evdns_set_random_bytes_fn()Nick Mathewson
This function has been a no-op since Libevent 2.0.4-alpha, when libevent got an arc4random() implementation. Libevent has finally removed it, which will break our compilation unless we stop calling it. (This is currently breaking compilation in OSS-fuzz.) Closes #40371.
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-17Add a MinTimeToReportBandwidth option; make it 0 for testing networks.Nick Mathewson
This option changes the time for which a bandwidth measurement period must have been in progress before we include it when reporting our observed bandwidth in our descriptors. Without this option, we only consider a time period towards our maximum if it has been running for a full day. Obviously, that's unacceptable for testing networks, where we'd like to get results as soon as possible. For non-testing networks, I've put a (somewhat arbitrary) 2-hour minimum on the option, since there are traffic analysis concerns with immediate reporting here. Closes #40337.
2021-03-17Merge remote-tracking branch 'tor-gitlab/mr/333' into maint-0.4.5George Kadianakis
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