Merge branch 'ticket33316_squashed'

This commit is contained in:
Nick Mathewson 2020-02-24 07:49:45 -05:00
commit d4d5d9d1d1
24 changed files with 84 additions and 69 deletions

2
.gitignore vendored
View File

@ -186,6 +186,8 @@ uptime-*.json
/src/lib/libtor-geoip-testing.a /src/lib/libtor-geoip-testing.a
/src/lib/libtor-intmath.a /src/lib/libtor-intmath.a
/src/lib/libtor-intmath-testing.a /src/lib/libtor-intmath-testing.a
/src/lib/libtor-llharden.a
/src/lib/libtor-llharden-testing.a
/src/lib/libtor-lock.a /src/lib/libtor-lock.a
/src/lib/libtor-lock-testing.a /src/lib/libtor-lock-testing.a
/src/lib/libtor-log.a /src/lib/libtor-log.a

View File

@ -70,6 +70,7 @@ TOR_UTIL_LIBS = \
src/lib/libtor-wallclock.a \ src/lib/libtor-wallclock.a \
src/lib/libtor-err.a \ src/lib/libtor-err.a \
src/lib/libtor-version.a \ src/lib/libtor-version.a \
src/lib/libtor-llharden.a \
src/lib/libtor-intmath.a \ src/lib/libtor-intmath.a \
src/lib/libtor-ctime.a src/lib/libtor-ctime.a
@ -104,6 +105,7 @@ TOR_UTIL_TESTING_LIBS = \
src/lib/libtor-wallclock-testing.a \ src/lib/libtor-wallclock-testing.a \
src/lib/libtor-err-testing.a \ src/lib/libtor-err-testing.a \
src/lib/libtor-version-testing.a \ src/lib/libtor-version-testing.a \
src/lib/libtor-llharden-testing.a \
src/lib/libtor-intmath.a \ src/lib/libtor-intmath.a \
src/lib/libtor-ctime-testing.a src/lib/libtor-ctime-testing.a
endif endif

15
changes/ticket33316 Normal file
View File

@ -0,0 +1,15 @@
o Minor bugfixes (initialization):
- Initialize the subsystems in our code in an order more closely
corresponding to their dependencies, so that every system is
initialized before the ones that (theoretically) depend on it.
Fixes bug 33316; bugfix on 0.4.0.1-alpha.
o Minor features (tests):
- Initialize all subsystems at the beginning of our unit test harness,
to avoid crashes due to uninitialized subsystems.
Follow-up from ticket 33316.
o Code simplification and refactoring:
- Merge the orconn and ocirc events into the "core" subsystem, which
manages or connections and origin circuits. Previously they
were isolated in subsystems of their own.

View File

@ -14,9 +14,7 @@
#include "lib/cc/torint.h" #include "lib/cc/torint.h"
#include "core/mainloop/mainloop_sys.h" #include "core/mainloop/mainloop_sys.h"
#include "core/or/ocirc_event_sys.h"
#include "core/or/or_sys.h" #include "core/or/or_sys.h"
#include "core/or/orconn_event_sys.h"
#include "feature/control/btrack_sys.h" #include "feature/control/btrack_sys.h"
#include "lib/compress/compress_sys.h" #include "lib/compress/compress_sys.h"
#include "lib/crypt_ops/crypto_sys.h" #include "lib/crypt_ops/crypto_sys.h"
@ -24,7 +22,7 @@
#include "lib/log/log_sys.h" #include "lib/log/log_sys.h"
#include "lib/net/network_sys.h" #include "lib/net/network_sys.h"
#include "lib/process/process_sys.h" #include "lib/process/process_sys.h"
#include "lib/process/winprocess_sys.h" #include "lib/llharden/winprocess_sys.h"
#include "lib/thread/thread_sys.h" #include "lib/thread/thread_sys.h"
#include "lib/time/time_sys.h" #include "lib/time/time_sys.h"
#include "lib/tls/tortls_sys.h" #include "lib/tls/tortls_sys.h"
@ -46,28 +44,26 @@ const subsys_fns_t *tor_subsystems[] = {
&sys_torerr, &sys_torerr,
&sys_wallclock, &sys_wallclock,
&sys_threads,
&sys_logging, &sys_logging,
&sys_threads,
&sys_time, &sys_time,
&sys_network,
&sys_compress,
&sys_crypto, &sys_crypto,
&sys_compress,
&sys_network,
&sys_tortls, &sys_tortls,
&sys_process,
&sys_orconn_event,
&sys_ocirc_event,
&sys_btrack,
&sys_evloop, &sys_evloop,
&sys_process,
&sys_mainloop, &sys_mainloop,
&sys_or, &sys_or,
&sys_relay, &sys_relay,
&sys_btrack,
&sys_dirauth, &sys_dirauth,
}; };

View File

@ -74,13 +74,11 @@ noinst_HEADERS += \
src/core/or/or_periodic.h \ src/core/or/or_periodic.h \
src/core/or/or_sys.h \ src/core/or/or_sys.h \
src/core/or/orconn_event.h \ src/core/or/orconn_event.h \
src/core/or/orconn_event_sys.h \
src/core/or/or_circuit_st.h \ src/core/or/or_circuit_st.h \
src/core/or/or_connection_st.h \ src/core/or/or_connection_st.h \
src/core/or/or_handshake_certs_st.h \ src/core/or/or_handshake_certs_st.h \
src/core/or/or_handshake_state_st.h \ src/core/or/or_handshake_state_st.h \
src/core/or/ocirc_event.h \ src/core/or/ocirc_event.h \
src/core/or/ocirc_event_sys.h \
src/core/or/origin_circuit_st.h \ src/core/or/origin_circuit_st.h \
src/core/or/policies.h \ src/core/or/policies.h \
src/core/or/port_cfg_st.h \ src/core/or/port_cfg_st.h \

View File

@ -22,7 +22,7 @@
#include "core/or/cpath_build_state_st.h" #include "core/or/cpath_build_state_st.h"
#include "core/or/ocirc_event.h" #include "core/or/ocirc_event.h"
#include "core/or/ocirc_event_sys.h" #include "core/or/or_sys.h"
#include "core/or/origin_circuit_st.h" #include "core/or/origin_circuit_st.h"
#include "lib/subsys/subsys.h" #include "lib/subsys/subsys.h"
@ -84,7 +84,7 @@ static dispatch_typefns_t ocirc_cevent_fns = {
.fmt_fn = ocirc_cevent_fmt, .fmt_fn = ocirc_cevent_fmt,
}; };
static int int
ocirc_add_pubsub(struct pubsub_connector_t *connector) ocirc_add_pubsub(struct pubsub_connector_t *connector)
{ {
if (DISPATCH_REGISTER_TYPE(connector, ocirc_state, &ocirc_state_fns)) if (DISPATCH_REGISTER_TYPE(connector, ocirc_state, &ocirc_state_fns))
@ -119,10 +119,3 @@ ocirc_cevent_publish(ocirc_cevent_msg_t *msg)
{ {
PUBLISH(ocirc_cevent, msg); PUBLISH(ocirc_cevent, msg);
} }
const subsys_fns_t sys_ocirc_event = {
.name = "ocirc_event",
.supported = true,
.level = -32,
.add_pubsub = ocirc_add_pubsub,
};

View File

@ -1,13 +0,0 @@
/* Copyright (c) 2007-2020, The Tor Project, Inc. */
/**
* \file ocirc_event_sys.h
* \brief Declare subsystem object for the origin circuit event module.
**/
#ifndef TOR_OCIRC_EVENT_SYS_H
#define TOR_OCIRC_EVENT_SYS_H
extern const struct subsys_fns_t sys_ocirc_event;
#endif /* !defined(TOR_OCIRC_EVENT_SYS_H) */

View File

@ -34,10 +34,22 @@ subsys_or_shutdown(void)
policies_free_all(); policies_free_all();
} }
static int
subsys_or_add_pubsub(struct pubsub_connector_t *connector)
{
int rv = 0;
if (orconn_add_pubsub(connector) < 0)
rv = -1;
if (ocirc_add_pubsub(connector) < 0)
rv = -1;
return rv;
}
const struct subsys_fns_t sys_or = { const struct subsys_fns_t sys_or = {
.name = "or", .name = "or",
.supported = true, .supported = true,
.level = 20, .level = 20,
.initialize = subsys_or_initialize, .initialize = subsys_or_initialize,
.shutdown = subsys_or_shutdown, .shutdown = subsys_or_shutdown,
.add_pubsub = subsys_or_add_pubsub,
}; };

View File

@ -14,4 +14,8 @@
extern const struct subsys_fns_t sys_or; extern const struct subsys_fns_t sys_or;
struct pubsub_connector_t;
int ocirc_add_pubsub(struct pubsub_connector_t *connector);
int orconn_add_pubsub(struct pubsub_connector_t *connector);
#endif /* !defined(TOR_CORE_OR_OR_SYS_H) */ #endif /* !defined(TOR_CORE_OR_OR_SYS_H) */

View File

@ -22,7 +22,7 @@
#define ORCONN_EVENT_PRIVATE #define ORCONN_EVENT_PRIVATE
#include "core/or/orconn_event.h" #include "core/or/orconn_event.h"
#include "core/or/orconn_event_sys.h" #include "core/or/or_sys.h"
DECLARE_PUBLISH(orconn_state); DECLARE_PUBLISH(orconn_state);
DECLARE_PUBLISH(orconn_status); DECLARE_PUBLISH(orconn_status);
@ -65,7 +65,7 @@ static dispatch_typefns_t orconn_status_fns = {
.fmt_fn = orconn_status_fmt, .fmt_fn = orconn_status_fmt,
}; };
static int int
orconn_add_pubsub(struct pubsub_connector_t *connector) orconn_add_pubsub(struct pubsub_connector_t *connector)
{ {
if (DISPATCH_REGISTER_TYPE(connector, orconn_state, &orconn_state_fns)) if (DISPATCH_REGISTER_TYPE(connector, orconn_state, &orconn_state_fns))
@ -90,10 +90,3 @@ orconn_status_publish(orconn_status_msg_t *msg)
{ {
PUBLISH(orconn_status, msg); PUBLISH(orconn_status, msg);
} }
const subsys_fns_t sys_orconn_event = {
.name = "orconn_event",
.supported = true,
.level = -33,
.add_pubsub = orconn_add_pubsub,
};

View File

@ -1,12 +0,0 @@
/* Copyright (c) 2007-2020, The Tor Project, Inc. */
/**
* \file orconn_event_sys.h
* \brief Declare subsystem object for the OR connection event module.
**/
#ifndef TOR_ORCONN_EVENT_SYS_H
#define TOR_ORCONN_EVENT_SYS_H
extern const struct subsys_fns_t sys_orconn_event;
#endif /* !defined(TOR_ORCONN_EVENT_SYS_H) */

View File

@ -57,7 +57,7 @@ btrack_add_pubsub(pubsub_connector_t *connector)
const subsys_fns_t sys_btrack = { const subsys_fns_t sys_btrack = {
.name = "btrack", .name = "btrack",
.supported = true, .supported = true,
.level = -30, .level = 55,
.initialize = btrack_init, .initialize = btrack_init,
.shutdown = btrack_fini, .shutdown = btrack_fini,
.add_pubsub = btrack_add_pubsub, .add_pubsub = btrack_add_pubsub,

View File

@ -19,6 +19,7 @@ include src/lib/fs/include.am
include src/lib/geoip/include.am include src/lib/geoip/include.am
include src/lib/include.libdonna.am include src/lib/include.libdonna.am
include src/lib/intmath/include.am include src/lib/intmath/include.am
include src/lib/llharden/include.am
include src/lib/lock/include.am include src/lib/lock/include.am
include src/lib/log/include.am include src/lib/log/include.am
include src/lib/math/include.am include src/lib/math/include.am

View File

@ -695,6 +695,6 @@ subsys_compress_initialize(void)
const subsys_fns_t sys_compress = { const subsys_fns_t sys_compress = {
.name = "compress", .name = "compress",
.supported = true, .supported = true,
.level = -70, .level = -55,
.initialize = subsys_compress_initialize, .initialize = subsys_compress_initialize,
}; };

View File

@ -0,0 +1,3 @@
lib/llharden/*.h
lib/subsys/*.h
orconfig.h

View File

@ -0,0 +1,19 @@
noinst_LIBRARIES += src/lib/libtor-llharden.a
if UNITTESTS_ENABLED
noinst_LIBRARIES += src/lib/libtor-llharden-testing.a
endif
# ADD_C_FILE: INSERT SOURCES HERE.
src_lib_libtor_llharden_a_SOURCES = \
src/lib/llharden/winprocess_sys.c
src_lib_libtor_llharden_testing_a_SOURCES = \
$(src_lib_libtor_llharden_a_SOURCES)
src_lib_libtor_llharden_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
src_lib_libtor_llharden_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
# ADD_C_FILE: INSERT HEADERS HERE.
noinst_HEADERS += \
src/lib/llharden/winprocess_sys.h

View File

@ -0,0 +1,6 @@
@dir /lib/llharden
@brief lib/llharden: low-level unconditional process hardening
This module contains process hardening code that we want to run before any
other code, including configuration. It needs to be self-contained, since
nothing else will be initialized at this point.

View File

@ -8,7 +8,7 @@
#include "orconfig.h" #include "orconfig.h"
#include "lib/subsys/subsys.h" #include "lib/subsys/subsys.h"
#include "lib/process/winprocess_sys.h" #include "lib/llharden/winprocess_sys.h"
#include <stdbool.h> #include <stdbool.h>
#include <stddef.h> #include <stddef.h>

View File

@ -39,7 +39,7 @@ const subsys_fns_t sys_network = {
.name = "network", .name = "network",
/* Network depends on logging, and a lot of other modules depend on network. /* Network depends on logging, and a lot of other modules depend on network.
*/ */
.level = -80, .level = -55,
.supported = true, .supported = true,
.initialize = subsys_network_initialize, .initialize = subsys_network_initialize,
.shutdown = subsys_network_shutdown, .shutdown = subsys_network_shutdown,

View File

@ -16,8 +16,7 @@ src_lib_libtor_process_a_SOURCES = \
src/lib/process/process_win32.c \ src/lib/process/process_win32.c \
src/lib/process/restrict.c \ src/lib/process/restrict.c \
src/lib/process/setuid.c \ src/lib/process/setuid.c \
src/lib/process/waitpid.c \ src/lib/process/waitpid.c
src/lib/process/winprocess_sys.c
src_lib_libtor_process_testing_a_SOURCES = \ src_lib_libtor_process_testing_a_SOURCES = \
$(src_lib_libtor_process_a_SOURCES) $(src_lib_libtor_process_a_SOURCES)
@ -35,5 +34,4 @@ noinst_HEADERS += \
src/lib/process/process_win32.h \ src/lib/process/process_win32.h \
src/lib/process/restrict.h \ src/lib/process/restrict.h \
src/lib/process/setuid.h \ src/lib/process/setuid.h \
src/lib/process/waitpid.h \ src/lib/process/waitpid.h
src/lib/process/winprocess_sys.h

View File

@ -26,7 +26,7 @@ subsys_process_shutdown(void)
const subsys_fns_t sys_process = { const subsys_fns_t sys_process = {
.name = "process", .name = "process",
.level = -35, .level = -18,
.supported = true, .supported = true,
.initialize = subsys_process_initialize, .initialize = subsys_process_initialize,
.shutdown = subsys_process_shutdown .shutdown = subsys_process_shutdown

View File

@ -130,8 +130,6 @@ subsys_threads_initialize(void)
const subsys_fns_t sys_threads = { const subsys_fns_t sys_threads = {
.name = "threads", .name = "threads",
.supported = true, .supported = true,
/* Threads is used by logging, which is a diagnostic feature, we want it to .level = -89,
* init right after low-level error handling and approx time. */
.level = -95,
.initialize = subsys_threads_initialize, .initialize = subsys_threads_initialize,
}; };

View File

@ -273,7 +273,7 @@ main(int c, const char **v)
int loglevel = LOG_ERR; int loglevel = LOG_ERR;
int accel_crypto = 0; int accel_crypto = 0;
subsystems_init_upto(SUBSYS_LEVEL_LIBS); subsystems_init();
options = options_new(); options = options_new();