blob: f11622cb5771845be49a49df0bd2fae7d88fdc9e [file] [log] [blame]
Author: Alan Ding <alanding@google.com>
Date: Fri Mar 19 12:43:00 2021 -0700
ureadahead: Allow disable debug tracing
Adds command line option: --no-debug-tracing (off by default).
Provide flag to disable tracing with tracing/events/fs/* and start them
in init instead since such events can be never allowed while enforcing
SELinux on debugfs_tracing_debug security context for non-init process.
There is no functional effect if option is not used.
diff --git a/src/trace.c b/src/trace.c
index dd1c585..854a570 100644
--- a/src/trace.c
+++ b/src/trace.c
@@ -122,7 +122,8 @@ trace (int daemonise,
const char *filename_to_replace,
const char *pack_file,
const char *path_prefix_filter,
- const PathPrefixOption *path_prefix)
+ const PathPrefixOption *path_prefix,
+ int debug_tracing)
{
int dfd;
FILE *fp;
@@ -182,21 +183,23 @@ trace (int daemonise,
num_cpus = 1;
/* Enable tracing of open() syscalls */
- if (set_value (dfd, "events/fs/do_sys_open/enable",
- TRUE, &old_sys_open_enabled) < 0)
- goto error;
- if (set_value (dfd, "events/fs/open_exec/enable",
- TRUE, &old_open_exec_enabled) < 0)
- goto error;
- if (set_value (dfd, "events/fs/uselib/enable",
- TRUE, &old_uselib_enabled) < 0) {
- NihError *err;
+ if (debug_tracing) {
+ if (set_value (dfd, "events/fs/do_sys_open/enable",
+ TRUE, &old_sys_open_enabled) < 0)
+ goto error;
+ if (set_value (dfd, "events/fs/open_exec/enable",
+ TRUE, &old_open_exec_enabled) < 0)
+ goto error;
+ if (set_value (dfd, "events/fs/uselib/enable",
+ TRUE, &old_uselib_enabled) < 0) {
+ NihError *err;
- err = nih_error_get ();
- nih_debug ("Missing uselib tracing: %s", err->message);
- nih_free (err);
+ err = nih_error_get ();
+ nih_debug ("Missing uselib tracing: %s", err->message);
+ nih_free (err);
- old_uselib_enabled = -1;
+ old_uselib_enabled = -1;
+ }
}
if (set_value (dfd, "buffer_size_kb", 8192/num_cpus, &old_buffer_size_kb) < 0)
goto error;
@@ -240,16 +243,18 @@ trace (int daemonise,
if (set_value (dfd, "tracing_on",
old_tracing_enabled, NULL) < 0)
goto error;
- if (old_uselib_enabled >= 0)
- if (set_value (dfd, "events/fs/uselib/enable",
- old_uselib_enabled, NULL) < 0)
+ if (debug_tracing) {
+ if (old_uselib_enabled >= 0)
+ if (set_value (dfd, "events/fs/uselib/enable",
+ old_uselib_enabled, NULL) < 0)
+ goto error;
+ if (set_value (dfd, "events/fs/open_exec/enable",
+ old_open_exec_enabled, NULL) < 0)
goto error;
- if (set_value (dfd, "events/fs/open_exec/enable",
- old_open_exec_enabled, NULL) < 0)
- goto error;
- if (set_value (dfd, "events/fs/do_sys_open/enable",
- old_sys_open_enabled, NULL) < 0)
- goto error;
+ if (set_value (dfd, "events/fs/do_sys_open/enable",
+ old_sys_open_enabled, NULL) < 0)
+ goto error;
+ }
/* Be nicer */
if (nice (15))
diff --git a/src/trace.h b/src/trace.h
index 16af782..f809cc6 100644
--- a/src/trace.h
+++ b/src/trace.h
@@ -37,7 +37,8 @@ int trace (int daemonise, int timeout,
const char *filename_to_replace,
const char *pack_file, /* May be null */
const char *path_prefix_filter, /* May be null */
- const PathPrefixOption *path_prefix);
+ const PathPrefixOption *path_prefix,
+ int debug_tracing);
NIH_END_EXTERN
diff --git a/src/ureadahead.c b/src/ureadahead.c
index 066bfff..d1bf5a1 100644
--- a/src/ureadahead.c
+++ b/src/ureadahead.c
@@ -110,6 +110,14 @@ static char *pack_file = NULL;
*/
static char *path_prefix_filter = NULL;
+/**
+ * no_debug_tracing:
+ *
+ * Provide flag to disable tracing with tracing/events/fs/* and start them in
+ * init instead since such events can be never allowed while enforcing SELinux.
+ */
+static int no_debug_tracing = FALSE;
+
static int
path_prefix_option (NihOption *option,
const char *arg)
@@ -211,6 +219,8 @@ static NihOption options[] = {
NULL, "PREFIX_FILTER", &path_prefix_filter, dup_string_handler },
{ 0, "pack-file", N_("Path of the pack file to use"),
NULL, "PACK_FILE", &pack_file, dup_string_handler },
+ { 0, "no-debug-tracing", N_("do not enable debug tracing events"),
+ NULL, NULL, &no_debug_tracing, NULL },
NIH_OPTION_LAST
};
@@ -301,7 +311,7 @@ main (int argc,
/* Trace to generate new pack files */
if (trace (daemonise, timeout, filename, pack_file,
- path_prefix_filter, &path_prefix) < 0) {
+ path_prefix_filter, &path_prefix, (no_debug_tracing == FALSE)) < 0) {
NihError *err;
err = nih_error_get ();