tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit e86833ade650104d610327432f2e646d13f6a2a2
parent c8d8fa0d3639058544ffe153c1b83e0ed80bf43a
Author: David Goulet <dgoulet@torproject.org>
Date:   Fri, 14 Oct 2022 09:12:23 -0400

Merge branch 'maint-0.4.5' into maint-0.4.7

Diffstat:
Achanges/bug40684 | 6++++++
Msrc/lib/time/compat_time.c | 11+++++++----
2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/changes/bug40684 b/changes/bug40684 @@ -0,0 +1,6 @@ + o Major bugfixes (OSX): + - Fix coarse-time computation on Apple platforms (like Mac M1) where + the Mach absolute time ticks do not correspond directly to + nanoseconds. Previously, we computed our shift value wrong, which + led us to give incorrect timing results. + Fixes bug 40684; bugfix on 0.3.3.1-alpha. diff --git a/src/lib/time/compat_time.c b/src/lib/time/compat_time.c @@ -253,11 +253,14 @@ monotime_init_internal(void) tor_assert(mach_time_info.denom != 0); { - // approximate only. - uint64_t ns_per_tick = mach_time_info.numer / mach_time_info.denom; - uint64_t ms_per_tick = ns_per_tick * ONE_MILLION; + // We want to compute this, approximately: + // uint64_t ns_per_tick = mach_time_info.numer / mach_time_info.denom; + // uint64_t ticks_per_ms = ONE_MILLION / ns_per_tick; + // This calculation multiplies first, though, to improve accuracy. + uint64_t ticks_per_ms = (ONE_MILLION * mach_time_info.denom) + / mach_time_info.numer; // requires that tor_log2(0) == 0. - monotime_shift = tor_log2(ms_per_tick); + monotime_shift = tor_log2(ticks_per_ms); } { // For converting ticks to milliseconds in a 32-bit-friendly way, we