If options_act() fails, restore the previous value of global_options

Before 0.3.3.1-alpha, we would exit() in this case immediately.  But
now that we leave tor_main() more conventionally, we need to make
sure we restore things so as not to cause a double free.

Fixes bug 27708; bugfix on 0.3.3.1-alpha.
This commit is contained in:
Nick Mathewson 2018-09-14 10:34:45 -04:00
parent 7c26f88fd7
commit 281854bab7
2 changed files with 5 additions and 0 deletions

4
changes/bug27708 Normal file
View File

@ -0,0 +1,4 @@
o Major bugfixes (restart-in-process):
- Fix a use-after-free error that could be caused by passing Tor an
impossible set of options that would fail during options_act().
Fixes bug 27708; bugfix on 0.3.3.1-alpha.

View File

@ -868,6 +868,7 @@ set_options(or_options_t *new_val, char **msg)
"Acting on config options left us in a broken state. Dying."); "Acting on config options left us in a broken state. Dying.");
tor_shutdown_event_loop_and_exit(1); tor_shutdown_event_loop_and_exit(1);
} }
global_options = old_options;
return -1; return -1;
} }
/* Issues a CONF_CHANGED event to notify controller of the change. If Tor is /* Issues a CONF_CHANGED event to notify controller of the change. If Tor is