[tor-commits] [tor/master] config, state: check magic in all callbacks.

nickm at torproject.org nickm at torproject.org
Fri Oct 25 12:15:41 UTC 2019


commit 63f2a310cbeb5908a202ba17da7e66535c77c894
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Oct 25 08:09:05 2019 -0400

    config,state: check magic in all callbacks.
---
 src/app/config/config.c    | 11 +++++++++++
 src/app/config/statefile.c |  5 +++++
 2 files changed, 16 insertions(+)

diff --git a/src/app/config/config.c b/src/app/config/config.c
index b6927b8b7..f2db0e525 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -921,6 +921,10 @@ get_options_mgr(void)
   return options_mgr;
 }
 
+#define CHECK_OPTIONS_MAGIC(opt) STMT_BEGIN                      \
+    config_check_toplevel_magic(get_options_mgr(), (opt));       \
+  STMT_END
+
 /** Return the contents of our frontpage string, or NULL if not configured. */
 MOCK_IMPL(const char*,
 get_dirportfrontpage, (void))
@@ -1027,6 +1031,7 @@ static void
 options_clear_cb(const config_mgr_t *mgr, void *opts)
 {
   (void)mgr;
+  CHECK_OPTIONS_MAGIC(opts);
   or_options_t *options = opts;
 
   routerset_free(options->ExcludeExitNodesUnion_);
@@ -3467,6 +3472,9 @@ options_validate_single_onion(or_options_t *options, char **msg)
 static int
 options_validate_cb(const void *old_options_, void *options_, char **msg)
 {
+  if (old_options_)
+    CHECK_OPTIONS_MAGIC(old_options_);
+  CHECK_OPTIONS_MAGIC(options_);
   const or_options_t *old_options = old_options_;
   or_options_t *options = options_;
 
@@ -4821,6 +4829,9 @@ options_check_transition_cb(const void *old_,
                             const void *new_val_,
                             char **msg)
 {
+  CHECK_OPTIONS_MAGIC(old_);
+  CHECK_OPTIONS_MAGIC(new_val_);
+
   const or_options_t *old = old_;
   const or_options_t *new_val = new_val_;
 
diff --git a/src/app/config/statefile.c b/src/app/config/statefile.c
index d3a0ec179..834ad93ed 100644
--- a/src/app/config/statefile.c
+++ b/src/app/config/statefile.c
@@ -184,6 +184,10 @@ get_state_mgr(void)
   return state_mgr;
 }
 
+#define CHECK_STATE_MAGIC(s) STMT_BEGIN                        \
+    config_check_toplevel_magic(get_state_mgr(), (s));         \
+  STMT_END
+
 /** Persistent serialized state. */
 static or_state_t *global_state = NULL;
 
@@ -286,6 +290,7 @@ or_state_validate_cb(const void *old_state, void *state_, char **msg)
   /* There is not a meaningful concept of a state-to-state transition,
    * since we do not reload the state after we start. */
   (void) old_state;
+  CHECK_STATE_MAGIC(state_);
 
   or_state_t *state = state_;
 





More information about the tor-commits mailing list