tracing: Allow syscall trace events for non privileged users
authorFrederic Weisbecker <fweisbec@gmail.com>
Thu, 18 Nov 2010 01:11:42 +0000 (02:11 +0100)
committerFrederic Weisbecker <fweisbec@gmail.com>
Thu, 18 Nov 2010 13:37:44 +0000 (14:37 +0100)
As for the raw syscalls events, individual syscall events won't
leak system wide information on task bound tracing. Allow non
privileged users to use them in such workflow.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Li Zefan <lizf@cn.fujitsu.com>
Cc: Jason Baron <jbaron@redhat.com>
include/linux/ftrace_event.h
include/linux/syscalls.h
include/trace/ftrace.h

index 312dce7e0d5294934637c2ab557cfb2f474c5665..725bf6bd39f7c7db777b2d0980dfb09dde78b015 100644 (file)
@@ -198,6 +198,14 @@ struct ftrace_event_call {
 #endif
 };
 
+#define __TRACE_EVENT_FLAGS(name, value)                               \
+       static int __init trace_init_flags_##name(void)                 \
+       {                                                               \
+               event_##name.flags = value;                             \
+               return 0;                                               \
+       }                                                               \
+       early_initcall(trace_init_flags_##name);
+
 #define PERF_MAX_TRACE_SIZE    2048
 
 #define MAX_FILTER_PRED                32
index cacc27a0e285163d9a8727a4131ffed478b8f46c..13b9731d30cf51c989bc91435253eaab6d1b259e 100644 (file)
@@ -137,7 +137,8 @@ extern struct trace_event_functions exit_syscall_print_funcs;
                .class                  = &event_class_syscall_enter,   \
                .event.funcs            = &enter_syscall_print_funcs,   \
                .data                   = (void *)&__syscall_meta_##sname,\
-       }
+       };                                                              \
+       __TRACE_EVENT_FLAGS(enter_##sname, TRACE_EVENT_FL_CAP_ANY)
 
 #define SYSCALL_TRACE_EXIT_EVENT(sname)                                        \
        static struct syscall_metadata                                  \
@@ -152,7 +153,8 @@ extern struct trace_event_functions exit_syscall_print_funcs;
                .class                  = &event_class_syscall_exit,    \
                .event.funcs            = &exit_syscall_print_funcs,    \
                .data                   = (void *)&__syscall_meta_##sname,\
-       }
+       };                                                              \
+       __TRACE_EVENT_FLAGS(exit_##sname, TRACE_EVENT_FL_CAP_ANY)
 
 #define SYSCALL_METADATA(sname, nb)                            \
        SYSCALL_TRACE_ENTER_EVENT(sname);                       \
index 6f540123d43e681e92a40393dd43ab836a22b9eb..e718a917d89729e0f5c5861047a996ea71896a11 100644 (file)
 
 #undef TRACE_EVENT_FLAGS
 #define TRACE_EVENT_FLAGS(name, value)                                 \
-       static int __init trace_init_flags_##name(void)                 \
-       {                                                               \
-               event_##name.flags = value;                             \
-               return 0;                                               \
-       }                                                               \
-       early_initcall(trace_init_flags_##name);
+       __TRACE_EVENT_FLAGS(name, value)
 
 #include TRACE_INCLUDE(TRACE_INCLUDE_FILE)