aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaylor Yu <catalyst@torproject.org>2017-09-20 18:47:15 -0500
committerTaylor Yu <catalyst@torproject.org>2017-09-20 18:54:37 -0500
commitad814cad41a101a3afd03ed0fdc55e2efd696abf (patch)
tree2e0594e1d456bd96b2ddf345762ec4fdc87fc14a
parent1c017edac369a40c9a1633b0560e5f0d85b4e39e (diff)
downloadtor-ad814cad41a101a3afd03ed0fdc55e2efd696abf.tar.gz
tor-ad814cad41a101a3afd03ed0fdc55e2efd696abf.zip
Avoid assertion failure for state file clock skew
The clock_skew_warning() refactoring allowed calls from or_state_load() to control_event_bootstrap_problem() to occur prior bootstrap phase 0, causing an assertion failure. Initialize the bootstrap status prior to calling clock_skew_warning() from or_state_load().
-rw-r--r--changes/bug236074
-rw-r--r--src/or/statefile.c8
2 files changed, 11 insertions, 1 deletions
diff --git a/changes/bug23607 b/changes/bug23607
new file mode 100644
index 0000000000..7aa48a94c6
--- /dev/null
+++ b/changes/bug23607
@@ -0,0 +1,4 @@
+ o Minor bugfixes (bootstrapping):
+ - Avoid an assertion failure when logging a state file clock skew
+ very early in bootstrapping. Fixes bug 23607; bugfix on
+ 0.3.2.1-alpha.
diff --git a/src/or/statefile.c b/src/or/statefile.c
index 86f26419be..2d579a0220 100644
--- a/src/or/statefile.c
+++ b/src/or/statefile.c
@@ -34,6 +34,7 @@
#include "config.h"
#include "confparse.h"
#include "connection.h"
+#include "control.h"
#include "entrynodes.h"
#include "hibernate.h"
#include "rephist.h"
@@ -405,9 +406,14 @@ or_state_load(void)
/* Warn the user if their clock has been set backwards,
* they could be tricked into using old consensuses */
time_t apparent_skew = time(NULL) - new_state->LastWritten;
- if (apparent_skew < 0)
+ if (apparent_skew < 0) {
+ /* Initialize bootstrap event reporting because we might call
+ * clock_skew_warning() before the bootstrap state is
+ * initialized, causing an asserttion failure. */
+ control_event_bootstrap(BOOTSTRAP_STATUS_STARTING, 0);
clock_skew_warning(NULL, (long)apparent_skew, 1, LD_GENERAL,
"local state file", fname);
+ }
} else {
log_info(LD_GENERAL, "Initialized state");
}