Commit Graph

1328 Commits

Author SHA1 Message Date
Alexander Færøy 7aa496a2e0 Fix TROVE-2023-004: Remote crash when compiled against OpenSSL
Fixes #40874

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-11-03 08:52:38 -04:00
Alexander Færøy 3d160b37c2 Lower the log-level and soften the language for our Zstd ABI compat check.
See: tpo/core/tor#40815.
2023-09-14 22:26:41 +02:00
David Goulet fd3f9e8580 zstd: Check errors right affer compressing/decompressing
Considering a compression bomb before looking for errors led to false negative
log warnings. Instead, it is possible the work failed for whatever reasons
which is not indicative of a compression bomb.

Fixes #40739

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-08-14 11:05:23 -04:00
Micah Elizabeth Scott 3036bedf30 Update CI builds to Debian Bullseye, fix associated compatibility bugs
This is a change intended for 0.4.7 maintenance as well as main.

The CI builds use Debian Buster which is now end of life, and I was
experiencing inconsistent CI failures with accessing its security update
server. I wanted to update CI to a distro that isn't EOL, and Bullseye
is the current stable release of Debian.

This opened up a small can of worms that this commit also deals with.
In particular there's a docker engine bug that we work around by
removing the docker-specific apt cleanup script if it exists, and
there's a new incompatibility between tracing and sandbox support.

The tracing/sandbox incompatibility itself had two parts:

  - The membarrier() syscall is used to deliver inter-processor
    synchronization events, and the external "userspace-rcu"
    data structure library would make assumptions that if membarrier
    is available at initialization it always will be. This caused
    segfaults in some cases when running trace + sandbox. Resolved this
    by allowing membarrier entirely, in the sandbox.

  - userspace-rcu also assumes it can block signals, and fails
    hard if this can't be done. We already include a similar carveout
    to allow this in the sandbox for fragile-hardening, so I extended
    that to cover tracing as well.

Addresses issue #40799

Signed-off-by: Micah Elizabeth Scott <beth@torproject.org>
2023-05-31 11:08:27 -07:00
David Goulet 7b87ecf7e2 Merge branch 'maint-0.4.5' into maint-0.4.7 2023-01-25 14:13:35 -05:00
Micah Elizabeth Scott a1d3d201ae compress_lzma: New enum values from liblzma 5.3.x
Add new liblzma enums (LZMA_SEEK_NEEDED and LZMA_RET_INTERNAL*)
conditional to the API version they arrived in. The first stable
version of liblzma this affects is 5.4.0

Fixes #40741

Signed-off-by: Micah Elizabeth Scott <beth@torproject.org>
2023-01-25 14:13:31 -05:00
Alex Xu (Hello71) 1d9166c8c9 Enable IP_BIND_ADDRESS_NO_PORT if supported
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-12-20 09:09:33 -05:00
David Goulet fbc9e92fdb relay: Use the configured number of threads for worker work calculation
We cap our number of CPU worker threads to at least 2 even if we have a
single core. But also, before we used to always add one extra thread
regardless of the number of core.

This meant that we were off when re-using the get_num_cpus() function
when calculating our onionskin work overhead because we were always off
by one.

This commit makes it that we always use the number of thread our actual
thread pool was configured with.

Fixes #40719

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-23 14:05:10 -05:00
David Goulet e3f6908984 relay: Make the max pending tasks per CPU a consensus parameter
Until now, there was this magic number (64) used as the maximum number
of tasks a CPU worker can take at once.

This commit makes it a consensus parameter so our future selves can
think of a better value depending on network conditions.

Part of #40704

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-09 13:13:21 -05:00
Mike Perry 09d32ac667 metrics: Use N_EWMA for moving avg, with N=100.
Part of #40708.
2022-11-09 11:48:42 -05:00
David Goulet 2066e0494c math: Replace naughty macro by an inline function
Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-07 14:49:41 -05:00
David Goulet c565ef9c58 metrics: Add running average of CC cwnd when exiting slow start
Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-07 09:55:06 -05:00
David Goulet 5db238f3e3 thread: Bump max detectable CPU from 16 to 128
Lets take advantage of those beefy machines ;).

Closes #40703

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-28 11:28:43 -04:00
David Goulet e86833ade6 Merge branch 'maint-0.4.5' into maint-0.4.7 2022-10-14 09:12:23 -04:00
Nick Mathewson e531d4d1b9 Fix a completely wrong calculation in mach monotime_init_internal()
Bug 1: We were purporting to calculate milliseconds per tick, when we
*should* have been computing ticks per millisecond.

Bug 2: Instead of computing either one of those, we were _actually_
computing femtoseconds per tick.

These two bugs covered for one another on x86 hardware, where 1 tick
== 1 nanosecond.  But on M1 OSX, 1 tick is about 41 nanoseconds,
causing surprising results.

Fixes bug 40684; bugfix on 0.3.3.1-alpha.
2022-10-13 13:40:10 -04:00
Alexander Færøy 5f2b75aafd Merge branch 'maint-0.4.6' into maint-0.4.7 2022-05-09 14:37:26 +00:00
Alexander Færøy 4ba89c0ccc Merge branch 'maint-0.4.5' into maint-0.4.6 2022-05-09 14:37:26 +00:00
pmu-ipf d422a66f87 sandbox: Permit rseq syscall as well
This was found to be necessary in conjunction with glibc 2.35 on Linux. 

Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
2022-05-09 14:17:22 +00:00
David Goulet 62fb184979 Merge branch 'maint-0.4.6' 2022-03-28 09:45:16 -04:00
David Goulet d14af825ce Merge branch 'maint-0.4.5' into maint-0.4.6 2022-03-28 09:45:16 -04:00
David Goulet b882b8d5d4 Merge branch 'tor-gitlab/mr/556' into maint-0.4.5 2022-03-28 09:44:31 -04:00
Nick Mathewson de3872656a Sandbox: Permit the clone3 system call
Apparently glibc-2.34 uses clone3, when previously it just used
clone.

Closes ticket #40590.
2022-03-27 18:34:25 -04:00
David Goulet f64a88e72d Merge branch 'tor-gitlab/mr/490' 2022-03-16 13:35:33 -04:00
David Goulet cf93d35209 crypto: Clarifying comment for the random hostname calculation
Closes #40520

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-03-15 14:00:00 -04:00
Dimitris Apostolou 2905e7667e Fix typos 2022-02-25 11:41:34 +02:00
David Goulet 52d1c1fd31 Merge branch 'tor-gitlab/mr/518' 2022-02-09 10:36:26 -05:00
David Goulet 9bf4a9e18a nss: Don't write empty payload on the wire
Part of #40548

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-08 09:31:13 -05:00
pseudonymisaTor f1387b398c conn: add ClientHello Padding TLS extension 2022-01-23 09:24:28 +00:00
Alexander Færøy d1493f2f27 Merge remote-tracking branch 'tor-gitlab/mr/485' into main 2021-11-08 14:14:03 +00:00
Nick Mathewson c93114ec9e Prefer use of __MINGW_PRINTF/SCANF_FORMAT if available.
Mingw headers sometimes like to define alternative scanf/printf
format attributes depending on whether they're using clang, UCRT,
MINGW_ANSI_STDIO, or the microsoft version of printf/scanf.  This
change attempts to use the right one on the given platform.

This is an attempt to fix part of #40355.
2021-11-05 12:36:34 -04:00
Simon South 001d880d10 sandbox: Allow "statx" syscall on i386 for glibc 2.33
glibc versions 2.33 and newer use the modern "statx" system call in their
implementations of stat() and opendir() for Linux on i386.  Prevent failures in
the sandbox unit tests by modifying the sandbox to allow this system call
without restriction on i386 when it is available, and update the test suite to
skip the "sandbox/stat_filename" test in this case as it is certain to fail.
2021-11-05 10:30:51 -04:00
Simon South f5980e60ed sandbox: Allow "clock_gettime64" syscall where defined
On 32-bit architectures where Linux provides the "clock_gettime64" system call,
including i386, glibc uses it in place of "clock_gettime".  Modify the sandbox
implementation to match, to prevent Tor's monotonic-time functions (in
src/lib/time/compat_time.c) failing when the sandbox is active.
2021-11-05 10:30:51 -04:00
Simon South 55571fc8d7 sandbox: Filter "chown32" syscall on i386
On i386 glibc uses the "chown32" system call instead of "chown".  Prevent
attempts to filter calls to chown() on this architecture from failing by
modifying the sandbox implementation to match.
2021-11-05 10:30:51 -04:00
Alexander Færøy c81901fd39 Merge remote-tracking branch 'tor-gitlab/mr/433' into main 2021-10-14 13:01:41 +00:00
c 6ada3be8f1 net: Reject invalid characters in port ranges
Fixes issue #22469 where port strings such as '0x00' get accepted, not
because the string gets converted to hex, but because the string is
silently truncated past the invalid character 'x'. This also causes
issues for strings such as '0x01-0x02' which look like a hex port range,
but in reality gets truncated to '0', which is definitely not what a
user intends.

Warn and reject such port strings as invalid.

Also, since we're throwing that "malformed port" warning a lot in the
function, wrap it up in a nice goto.

Fixes #22469
2021-10-04 15:19:16 -04:00
Simon South fbf2e7e921 sandbox: Allow use with fragile hardening
When building with --enable-fragile-hardening, add or relax Linux
seccomp rules to allow AddressSanitizer to execute normally if the
process terminates with the sandbox active.

Further resolves issue 11477.
2021-09-28 11:06:50 -04:00
Daniel Pinto 7a06b8713d Fix compilation error when __NR_time is not defined. #40465 2021-09-09 23:55:49 +01:00
Alexander Færøy ac254d5334 Merge branch 'maint-0.4.6' into main 2021-08-11 13:14:26 +00:00
Alexander Færøy e3c2179f25 Merge branch 'maint-0.4.5' into maint-0.4.6 2021-08-11 13:14:26 +00:00
Alexander Færøy c48d1c3f7c Merge branch 'maint-0.3.5' into maint-0.4.5 2021-08-11 13:14:26 +00:00
George Kadianakis fe5a9db1e6 Disable ed25519-donna's batch verification.
Fixes bug 40078.

As reported by hdevalence our batch verification logic can cause an assert
crash.

The assert happens because when the batch verification of ed25519-donna fails,
the code in `ed25519_checksig_batch()` falls back to doing a single
verification for each signature.

The crash occurs because batch verification failed, but then all signatures
individually verified just fine.

That's because batch verification and single verification use a different
equation which means that there are sigs that can pass single verification
but fail batch verification.

Fixing this would require modding ed25519-donna which is not in scope for
this ticket, and will be soon deprecated in favor of arti and
ed25519-dalek, so my branch instead removes batch verification.
2021-08-11 13:14:05 +00:00
David Goulet 399518da02 relay: Reduce streaming compression ratio from HIGH to LOW
Fixes #40301

Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-08-11 12:51:32 +00:00
David Goulet 70d8fb3eab relay: Reduce streaming compression ratio from HIGH to LOW
Fixes #40301

Signed-off-by: David Goulet <dgoulet@torproject.org>
2021-08-11 12:47:20 +00:00
George Kadianakis 6aff048978 Merge branch 'maint-0.4.6' 2021-07-06 13:42:53 +03:00
George Kadianakis 167f3bc4ec Merge branch 'maint-0.4.5' into maint-0.4.6 2021-07-06 13:42:53 +03:00
George Kadianakis 98b9df61f6 Merge branch 'mr/395' into maint-0.4.5 2021-07-06 13:42:29 +03:00
Nick Mathewson c1d96358d4 Use native timegm when available.
Continue having a tor_gmtime_impl() unit test so that we can detect
any problems in our replacement function; add a new test function to
make sure that gmtime<->timegm are a round-trip on now-ish times.

This is a fix for bug #40383, wherein we ran into trouble because
tor_timegm() does not believe that time_t should include a count of
leap seconds, but FreeBSD's gmtime believes that it should.  This
disagreement meant that for a certain amount of time each day,
instead of calculating the most recent midnight, our voting-schedule
functions would calculate the second-most-recent midnight, and lead
to an assertion failure.

I am calling this a bugfix on 0.2.0.3-alpha when we first started
calculating our voting schedule in this way.
2021-07-06 13:33:05 +03:00
David Goulet f2647295c0 Merge branch 'maint-0.4.5' into maint-0.4.6 2021-06-29 10:41:36 -04:00
David Goulet 23451ef2fe Merge branch 'maint-0.4.6' 2021-06-29 10:41:36 -04:00
Nick Mathewson fce99957e2 Suppress strict-prototypes warning on NSS pk11pub.h header
We already did this in a couple of places, but there are more that
we didn't get.  This is necessary for systems with versions of
NSS that don't do their prototypes properly.

Fixes #40409; bugfix on 0.3.5.1-alpha.
2021-06-28 09:10:28 -04:00