sr: Switch from tor_assert() to BUG()

Closes #19566

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
Neel Chauhan 2017-09-19 16:08:24 -04:00 committed by David Goulet
parent 72c1303cef
commit d18a167ff3
3 changed files with 20 additions and 7 deletions

6
changes/ticket19566 Normal file
View File

@ -0,0 +1,6 @@
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.

View File

@ -949,7 +949,8 @@ sr_compute_srv(void)
/* Computing a shared random value in the commit phase is very wrong. This /* 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 * should only happen at the very end of the reveal phase when a new
* protocol run is about to start. */ * 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(); state_commits = sr_state_get_commits();
commits = smartlist_new(); commits = smartlist_new();

View File

@ -594,8 +594,10 @@ disk_state_update(void)
{ {
config_line_t **next, *line; config_line_t **next, *line;
tor_assert(sr_disk_state); if (BUG(!sr_disk_state))
tor_assert(sr_state); return;
if (BUG(!sr_state))
return;
/* Reset current disk state. */ /* Reset current disk state. */
disk_state_reset(); disk_state_reset();
@ -759,7 +761,8 @@ disk_state_save_to_disk(void)
STATIC void STATIC void
reset_state_for_new_protocol_run(time_t valid_after) reset_state_for_new_protocol_run(time_t valid_after)
{ {
tor_assert(sr_state); if (BUG(!sr_state))
return;
/* Keep counters in track */ /* Keep counters in track */
sr_state->n_reveal_rounds = 0; sr_state->n_reveal_rounds = 0;
@ -1091,7 +1094,8 @@ sr_state_update(time_t valid_after)
{ {
sr_phase_t next_phase; 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. */ /* Don't call this function twice in the same voting period. */
if (valid_after <= sr_state->valid_after) { if (valid_after <= sr_state->valid_after) {
@ -1130,7 +1134,8 @@ sr_state_update(time_t valid_after)
/* Count the current round */ /* Count the current round */
if (sr_state->phase == SR_PHASE_COMMIT) { if (sr_state->phase == SR_PHASE_COMMIT) {
/* invariant check: we've not entered reveal phase yet */ /* 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++; sr_state->n_commit_rounds++;
} else { } else {
sr_state->n_reveal_rounds++; sr_state->n_reveal_rounds++;
@ -1320,7 +1325,8 @@ sr_state_init(int save_to_disk, int read_from_disk)
void void
set_sr_phase(sr_phase_t phase) set_sr_phase(sr_phase_t phase)
{ {
tor_assert(sr_state); if (BUG(!sr_state))
return;
sr_state->phase = phase; sr_state->phase = phase;
} }