summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorteor (Tim Wilson-Brown) <teor2345@gmail.com>2015-09-30 13:33:56 +0200
committerteor (Tim Wilson-Brown) <teor2345@gmail.com>2015-09-30 13:33:56 +0200
commitcd279ca7f59cba46a319854c9e7f65fbb6f0a0af (patch)
treec16e0489b63412c07656b221b9486aadf1685a4b
parent551dba3290cc77b512dc339bab4a7a81d1892c7c (diff)
downloadtor-cd279ca7f59cba46a319854c9e7f65fbb6f0a0af.tar.gz
tor-cd279ca7f59cba46a319854c9e7f65fbb6f0a0af.zip
Warn when the system clock is set back in time
Warn when the state file was last written in the future. Tor doesn't know that consensuses have expired if the clock is in the past. Patch by "teor". Implements ticket #17188.
-rw-r--r--changes/warn-when-time-goes-backwards5
-rw-r--r--src/or/statefile.c12
2 files changed, 17 insertions, 0 deletions
diff --git a/changes/warn-when-time-goes-backwards b/changes/warn-when-time-goes-backwards
new file mode 100644
index 0000000000..d7e584d9ff
--- /dev/null
+++ b/changes/warn-when-time-goes-backwards
@@ -0,0 +1,5 @@
+ o Minor features (security, clock):
+ - Warn when the system clock is set back in time (when the
+ state file was last written in the future). Tor doesn't know
+ that consensuses have expired if the clock is in the past.
+ Patch by "teor". Implements ticket #17188.
diff --git a/src/or/statefile.c b/src/or/statefile.c
index dd1894beb7..a904c411f4 100644
--- a/src/or/statefile.c
+++ b/src/or/statefile.c
@@ -372,6 +372,18 @@ or_state_load(void)
new_state = or_state_new();
} else if (contents) {
log_info(LD_GENERAL, "Loaded state from \"%s\"", fname);
+ /* Warn the user if their clock has been set backwards,
+ * they could be tricked into using old consensuses */
+ if (new_state->LastWritten > time(NULL)) {
+ char last_written_str[ISO_TIME_LEN+1];
+ char now_str[ISO_TIME_LEN+1];
+ format_iso_time(last_written_str, new_state->LastWritten),
+ format_iso_time(now_str, time(NULL));
+ log_warn(LD_GENERAL, "Your system clock has been set back in time. "
+ "Tor needs an accurate clock to know when the consensus "
+ "expires. Clock time is %s, state file time is %s.",
+ now_str, last_written_str);
+ }
} else {
log_info(LD_GENERAL, "Initialized state");
}