mirror repository of the tor core protocol in case of issues
Go to file
Micah Elizabeth Scott 23f4a28f97 token_bucket_ctr: replace 32-bit wallclock time with monotime
This started as a response to ticket #40792 where Coverity is
complaining about a potential year 2038 bug where we cast time_t from
approx_time() to uint32_t for use in token_bucket_ctr.

There was a larger can of worms though, since token_bucket really
doesn't want to be using wallclock time here. I audited the call sites
for approx_time() and changed any that used a 32-bit cast or made
inappropriate use of wallclock time. Things like certificate lifetime,
consensus intervals, etc. need wallclock time. Measurements of rates
over time, however, are better served with a monotonic timer that does
not try and sync with wallclock ever.

Looking closer at token_bucket, its design is a bit odd because it was
initially intended for use with tick units but later forked into
token_bucket_rw which uses ticks to count bytes per second, and
token_bucket_ctr which uses seconds to count slower events. The rates
represented by either token bucket can't be lower than 1 per second, so
the slower timer in 'ctr' is necessary to represent the slower rates of
things like connections or introduction packets or rendezvous attempts.

I considered modifying token_bucket to use 64-bit timestamps overall
instead of 32-bit, but that seemed like an unnecessarily invasive change
that would grant some peace of mind but probably not help much. I was
more interested in removing the dependency on wallclock time. The
token_bucket_rw timer already uses monotonic time. This patch converts
token_bucket_ctr to use monotonic time as well. It introduces a new
monotime_coarse_absolute_sec(), which is currently the same as nsec
divided by a billion but could be optimized easily if we ever need to.

This patch also might fix a rollover bug.. I haven't tested this
extensively but I don't think the previous version of the rollover code
on either token bucket was correct, and I would expect it to get stuck
after the first rollover.

Signed-off-by: Micah Elizabeth Scott <beth@torproject.org>
2023-05-24 11:43:11 -04:00
.gitlab/issue_templates Remove Proposal.md. 2021-02-12 20:39:48 +00:00
changes changes: Ticket 40634 (hs_pow) 2023-05-10 07:38:29 -07:00
contrib Remove broken MSVC support 2022-04-27 23:09:44 -04:00
doc hs_pow: Rate limited dequeue 2023-05-10 07:38:28 -07:00
m4 added check for compiler support of Wextra-semi 2022-11-01 15:32:43 -06:00
scripts gitlab-ci: Try enabling GPL mode so we test hs_pow 2023-05-10 07:38:29 -07:00
src token_bucket_ctr: replace 32-bit wallclock time with monotime 2023-05-24 11:43:11 -04:00
.appveyor.yml CI: Remove VS2015 AppVeyor build 2020-08-12 14:09:32 +03:00
.clang-format Add a dire warning about not reformatting the whole codebase yet. 2020-02-12 18:52:35 -05:00
.editorconfig Add .editorconfig to follow coding standards style 2018-06-17 19:24:40 -04:00
.gitignore ext: build equix and hashx using automake 2023-05-10 07:38:28 -07:00
.gitlab-ci.yml gitlab-ci: Try enabling GPL mode so we test hs_pow 2023-05-10 07:38:29 -07:00
.travis.yml rust: Remove Rust support from tree 2021-10-06 15:12:04 -04:00
acinclude.m4 m4: Change LIBS order of TOR_SEARCH_LIBRARY() 2021-01-13 09:52:10 -05:00
autogen.sh Cleanup shellcheck warnings in autogen.sh 2019-01-18 13:49:30 +02:00
ChangeLog changelog: Update with latest releases 2023-01-12 12:11:16 -05:00
CODE_OF_CONDUCT Add CODE_OF_CONDUCT file 2018-07-05 11:22:33 +03:00
configure.ac ext: build equix and hashx using automake 2023-05-10 07:38:28 -07:00
CONTRIBUTING improve a URL 2018-05-11 18:00:30 -04:00
Doxyfile.in Remove last artifacts of Rust related code 2021-10-06 15:12:04 -04:00
INSTALL Remove old instructions from INSTALL 2018-07-03 16:34:52 +03:00
LICENSE Merge branch 'maint-0.3.5' into maint-0.4.4 2021-03-12 11:36:34 -05:00
Makefile.am ext: build equix and hashx using automake 2023-05-10 07:38:28 -07:00
README.md readme: Fix sentence in Releases section 2022-03-09 14:13:34 -05:00
ReleaseNotes changelog: Update with latest releases 2023-01-12 12:11:16 -05:00
warning_flags.in Try @warning_flags to avoid bloating verbose make logs 2018-12-21 10:00:23 -05:00

Tor protects your privacy on the internet by hiding the connection between your Internet address and the services you use. We believe Tor is reasonably secure, but please ensure you read the instructions and configure it properly.

Build

To build Tor from source:

./configure
make
make install

To build Tor from a just-cloned git repository:

./autogen.sh
./configure
make
make install

Releases

The tarballs, checksums and signatures can be found here: https://dist.torproject.org

  • Checksum: <tarball-name>.sha256sum
  • Signatures: <tarball-name>.sha256sum.asc

Schedule

You can find our release schedule here:

Keys that CAN sign a release

The following keys are the maintainers of this repository. One or many of these keys can sign the releases, do NOT expect them all:

Development

See our hacking documentation in doc/HACKING/.

Resources

Home page:

Download new versions:

Documentation, including links to installation and setup instructions:

Frequently Asked Questions: