tor

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

commit c420667a2e4773c9061753b51833bba1267a0bde
parent ce7476cb59923fa6da0b3b989e8c782b63189ba6
Author: David Goulet <dgoulet@torproject.org>
Date:   Tue, 10 Jan 2023 11:53:10 -0500

Merge branch 'tor-gitlab/mr/676'

Diffstat:
Achanges/ticket40437 | 4++++
Msrc/core/or/circuitstats.c | 12++++++++++++
2 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/changes/ticket40437 b/changes/ticket40437 @@ -0,0 +1,4 @@ + o Minor bugfixes (state file): + - Avoid a segfault if the state file doesn't contains TotalBuildTimes along + CircuitBuildAbandonedCount being above 0. Fixes bug 40437; bugfix on + 0.3.5.1-alpha. diff --git a/src/core/or/circuitstats.c b/src/core/or/circuitstats.c @@ -1018,6 +1018,18 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt, return 0; } + /* We had a case where someone removed their TotalBuildTimes from the state + * files while having CircuitBuildAbandonedCount above 0 leading to a + * segfault (#40437). Simply bug on it and return an error so at least the + * user will learn that they broke the state file. */ + if (BUG(state->TotalBuildTimes <= 0 && + state->CircuitBuildAbandonedCount > 0)) { + log_warn(LD_GENERAL, "CircuitBuildAbandonedCount count is above 0 but " + "no TotalBuildTimes have been found. Unable to " + "parse broken state file"); + return -1; + } + /* build_time_t 0 means uninitialized */ loaded_times = tor_calloc(state->TotalBuildTimes, sizeof(build_time_t));