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:
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));