[tor-commits] [tor/master] trace: Emit a warning if tracing is built in

nickm at torproject.org nickm at torproject.org
Fri Jul 10 17:05:59 UTC 2020


commit b049cc3ace18dd42493ca768cf4636dfd89569fc
Author: David Goulet <dgoulet at torproject.org>
Date:   Wed Mar 11 12:12:28 2020 -0400

    trace: Emit a warning if tracing is built in
    
    Built in tracing should _not_ be run if it was not set on purpose. Warn as
    loud as we can in order to inform the user that they are running a version
    with tracing capabilities built in.
    
    This commit also adds a subsys stub because utlimately the logging will happen
    in the init phase but because the default log file is not set in the
    sys_logging init function, the stub is not useful for now.
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 configure.ac               |  7 ++++++-
 src/app/main/main.c        |  4 ++++
 src/lib/trace/include.am   |  4 ++++
 src/lib/trace/trace.h      | 21 +++++++++++++++++++++
 src/lib/trace/trace_stub.c | 19 +++++++++++++++++++
 src/lib/trace/trace_sys.c  |  5 ++++-
 src/lib/trace/trace_sys.h  |  8 ++++++++
 7 files changed, 66 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index cd014268b..75fd709f9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -273,9 +273,9 @@ if test "x$enable_tracing_instrumentation_lttng" = "xyes"; then
                                   On Debian, apt install liblttng-ust-dev"])], [])
   AC_DEFINE([USE_TRACING_INSTRUMENTATION_LTTNG], [1], [Using LTTng instrumentation])
   TOR_TRACE_LIBS="-llttng-ust -ldl"
+  have_tracing=1
 fi
 
-
 dnl USDT instrumentation option.
 AC_ARG_ENABLE(tracing-instrumentation-usdt,
               AS_HELP_STRING([--enable-tracing-instrumentation-usdt],
@@ -291,6 +291,7 @@ if test "x$enable_tracing_instrumentation_usdt" = "xyes"; then
   dnl --with-sdt. There is unfortunately no way to check that so we always
   dnl build the USDT probes even though LTTng instrumentation was requested.
   AC_DEFINE([USE_TRACING_INSTRUMENTATION_USDT], [1], [Using USDT instrumentation])
+  have_tracing=1
 fi
 
 dnl Tracepoints event to debug logs.
@@ -301,6 +302,9 @@ AC_ARG_ENABLE(tracing-instrumentation-log-debug,
                [Tracepoints to log debug]), [])
 AM_CONDITIONAL([USE_TRACING_INSTRUMENTATION_LOG_DEBUG],
                [test "x$enable_tracing_instrumentation_log_debug" = "xyes"])
+if test "x$enable_tracing_instrumentation_log_debug" = "xyes"; then
+  have_tracing=1
+fi
 
 dnl Define that tracing is supported if any instrumentation is used.
 AM_COND_IF([USE_TRACING_INSTRUMENTATION_LOG_DEBUG],
@@ -309,6 +313,7 @@ AM_COND_IF([USE_TRACING_INSTRUMENTATION_USDT],
            AC_DEFINE([HAVE_TRACING], [1], [Compiled with tracing support]))
 AM_COND_IF([USE_TRACING_INSTRUMENTATION_LTTNG],
            AC_DEFINE([HAVE_TRACING], [1], [Compiled with tracing support]))
+AM_CONDITIONAL([USE_TRACING], [test "x$have_tracing" = x1 ])
 
 dnl Finally, define the trace libs.
 AC_SUBST([TOR_TRACE_LIBS])
diff --git a/src/app/main/main.c b/src/app/main/main.c
index 89ba78742..e1d5772e3 100644
--- a/src/app/main/main.c
+++ b/src/app/main/main.c
@@ -59,6 +59,7 @@
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_s2k.h"
 #include "lib/net/resolve.h"
+#include "lib/trace/trace.h"
 
 #include "lib/process/waitpid.h"
 #include "lib/pubsub/pubsub_build.h"
@@ -602,6 +603,9 @@ tor_init(int argc, char *argv[])
   rust_log_welcome_string();
 #endif /* defined(HAVE_RUST) */
 
+  /* Warn _if_ the tracing subsystem is built in. */
+  tracing_log_warning();
+
   int init_rv = options_init_from_torrc(argc,argv);
   if (init_rv < 0) {
     log_err(LD_CONFIG,"Reading config failed--see warnings above.");
diff --git a/src/lib/trace/include.am b/src/lib/trace/include.am
index 844033132..6fe136565 100644
--- a/src/lib/trace/include.am
+++ b/src/lib/trace/include.am
@@ -26,6 +26,10 @@ if USE_TRACING_INSTRUMENTATION_LTTNG
 include src/lib/trace/lttng/include.am
 endif
 
+if USE_TRACING
 src_lib_libtor_trace_a_SOURCES = $(LIBTOR_TRACE_A_SOURCES)
+else
+src_lib_libtor_trace_a_SOURCES = src/lib/trace/trace_stub.c
+endif
 
 noinst_HEADERS+= $(TRACEHEADERS)
diff --git a/src/lib/trace/trace.h b/src/lib/trace/trace.h
index 94cbbc1e4..22589dbe9 100644
--- a/src/lib/trace/trace.h
+++ b/src/lib/trace/trace.h
@@ -9,7 +9,28 @@
 #ifndef TOR_LIB_TRACE_TRACE_H
 #define TOR_LIB_TRACE_TRACE_H
 
+#include "orconfig.h"
+
 void tor_trace_init(void);
 void tor_trace_free_all(void);
 
+#ifdef HAVE_TRACING
+
+#include "lib/log/log.h"
+
+static inline void
+tracing_log_warning(void)
+{
+  log_warn(LD_GENERAL,
+           "Tracing capabilities have been built in. If this is NOT on "
+           "purpose, your tor is NOT safe to run.");
+}
+
+#else
+
+/* NOP it. */
+#define tracing_log_warning()
+
+#endif /* defined(HAVE_TRACING) */
+
 #endif /* !defined(TOR_LIB_TRACE_TRACE_H) */
diff --git a/src/lib/trace/trace_stub.c b/src/lib/trace/trace_stub.c
new file mode 100644
index 000000000..9043efe36
--- /dev/null
+++ b/src/lib/trace/trace_stub.c
@@ -0,0 +1,19 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file trace_stub.c
+ * \brief Stub declaratinos for use when trace library is disabled.
+ **/
+
+#include "lib/subsys/subsys.h"
+
+#include "lib/trace/trace_sys.h"
+
+const subsys_fns_t sys_tracing = {
+  SUBSYS_DECLARE_LOCATION(),
+
+  .name = "tracing",
+  .supported = false,
+  .level = TRACE_SUBSYS_LEVEL,
+};
diff --git a/src/lib/trace/trace_sys.c b/src/lib/trace/trace_sys.c
index d6e59f4c3..2ba025840 100644
--- a/src/lib/trace/trace_sys.c
+++ b/src/lib/trace/trace_sys.c
@@ -25,9 +25,12 @@ subsys_tracing_shutdown(void)
 }
 
 const subsys_fns_t sys_tracing = {
+  SUBSYS_DECLARE_LOCATION(),
+
   .name = "tracing",
   .supported = true,
-  .level = -85,
+  .level = TRACE_SUBSYS_LEVEL,
+
   .initialize = subsys_tracing_initialize,
   .shutdown = subsys_tracing_shutdown,
 };
diff --git a/src/lib/trace/trace_sys.h b/src/lib/trace/trace_sys.h
index e9c97c08f..d4da5a970 100644
--- a/src/lib/trace/trace_sys.h
+++ b/src/lib/trace/trace_sys.h
@@ -11,4 +11,12 @@
 
 extern const struct subsys_fns_t sys_tracing;
 
+/**
+ * Subsystem level for the tracing system.
+ *
+ * Defined here so that it can be shared between the real and stub
+ * definitions.
+ **/
+#define TRACE_SUBSYS_LEVEL (-85)
+
 #endif /* !defined(TOR_TRACE_SYS_H) */





More information about the tor-commits mailing list