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().
This commit is contained in:
Taylor Yu
2017-09-20 18:47:15 -05:00
parent 1c017edac3
commit ad814cad41
2 changed files with 11 additions and 1 deletions
+4
View File
@@ -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.
+7 -1
View File
@@ -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");
}