--- /dev/null
+ o Code simplification and refactoring (shared random, dirauth):
+ - Change many tor_assert() to use BUG() instead. The idea is to not crash
+ a dirauth but rather scream loudly with a stacktrace and let it continue
+ run. The shared random subsystem is very resilient and if anything wrong
+ happens with it, at worst a non coherent value will be put in the vote
+ and discarded by the other authorities. Closes ticket 19566.
/* Computing a shared random value in the commit phase is very wrong. This
* should only happen at the very end of the reveal phase when a new
* protocol run is about to start. */
- tor_assert(sr_state_get_phase() == SR_PHASE_REVEAL);
+ if (BUG(sr_state_get_phase() != SR_PHASE_REVEAL))
+ return;
state_commits = sr_state_get_commits();
commits = smartlist_new();
{
config_line_t **next, *line;
- tor_assert(sr_disk_state);
- tor_assert(sr_state);
+ if (BUG(!sr_disk_state))
+ return;
+ if (BUG(!sr_state))
+ return;
/* Reset current disk state. */
disk_state_reset();
STATIC void
reset_state_for_new_protocol_run(time_t valid_after)
{
- tor_assert(sr_state);
+ if (BUG(!sr_state))
+ return;
/* Keep counters in track */
sr_state->n_reveal_rounds = 0;
{
sr_phase_t next_phase;
- tor_assert(sr_state);
+ if (BUG(!sr_state))
+ return;
/* Don't call this function twice in the same voting period. */
if (valid_after <= sr_state->valid_after) {
/* Count the current round */
if (sr_state->phase == SR_PHASE_COMMIT) {
/* invariant check: we've not entered reveal phase yet */
- tor_assert(sr_state->n_reveal_rounds == 0);
+ if (BUG(sr_state->n_reveal_rounds != 0))
+ return;
sr_state->n_commit_rounds++;
} else {
sr_state->n_reveal_rounds++;
void
set_sr_phase(sr_phase_t phase)
{
- tor_assert(sr_state);
+ if (BUG(!sr_state))
+ return;
sr_state->phase = phase;
}