Commit d0a91386 authored by Nick Mathewson's avatar Nick Mathewson 🦀 Committed by Sebastian Hahn
Browse files

Don't crash when accountingmax is set in non-server Tors

We use a hash of the identity key to seed a prng to tell when an
accounting period should end.  But thanks to the bug998 changes,
clients no longer have server-identity keys to use as a long-term seed
in accounting calculations.  In any case, their identity keys (as used
in TLS) were never never fixed.  So we can just set the wakeup time
from a random seed instead there.  Still open is whether everybody
should be random.

This patch fixes bug 2235, which was introduced in 0.2.2.18-alpha.

Diagnosed with help from boboper on irc.
parent 3a890b3b
Loading
Loading
Loading
Loading

changes/bug2235

0 → 100644
+3 −0
Original line number Diff line number Diff line
  o Minor bugfixes
    - Avoid crashes when AccountingMax is set on clients.  Fixes bug 2235;
      Bugfix on 0.2.2.18-alpha.  Diagnosed by boboper.
+13 −8
Original line number Diff line number Diff line
@@ -463,7 +463,9 @@ accounting_set_wakeup_time(void)
    }
  }

  if (server_identity_key_is_set()) {
    format_iso_time(buf, interval_start_time);

    crypto_pk_get_digest(get_server_identity_key(), digest);

    d_env = crypto_new_digest_env();
@@ -471,6 +473,9 @@ accounting_set_wakeup_time(void)
    crypto_digest_add_bytes(d_env, digest, DIGEST_LEN);
    crypto_digest_get_digest(d_env, digest, DIGEST_LEN);
    crypto_free_digest_env(d_env);
  } else {
    crypto_rand(digest, DIGEST_LEN);
  }

  if (!expected_bandwidth_usage) {
    char buf1[ISO_TIME_LEN+1];