Merge tag 'trace-v4.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 Aug 2016 16:50:06 +0000 (12:50 -0400)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 Aug 2016 16:50:06 +0000 (12:50 -0400)
Pull tracing fixes from Steven Rostedt:
 "A few updates and fixes:

   - move the suppressing of the __builtin_return_address >0 warning to
     the tracing directory only.

   - metag recordmcount fix for newer glibc's

   - two tracing histogram fixes that were reported by KASAN"

* tag 'trace-v4.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing: Fix use-after-free in hist_register_trigger()
  tracing: Fix use-after-free in hist_unreg_all/hist_enable_unreg_all
  Makefile: Mute warning for __builtin_return_address(>0) for tracing only
  ftrace/recordmcount: Work around for addition of metag magic but not relocations

Makefile
kernel/trace/Makefile
kernel/trace/trace_events_hist.c
scripts/recordmcount.c

index d6d401b..182a84d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -621,7 +621,6 @@ include arch/$(SRCARCH)/Makefile
 
 KBUILD_CFLAGS  += $(call cc-option,-fno-delete-null-pointer-checks,)
 KBUILD_CFLAGS  += $(call cc-disable-warning,maybe-uninitialized,)
-KBUILD_CFLAGS  += $(call cc-disable-warning,frame-address,)
 
 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
 KBUILD_CFLAGS  += -Os
index 979e7bf..d0a1617 100644 (file)
@@ -1,4 +1,8 @@
 
+# We are fully aware of the dangers of __builtin_return_address()
+FRAME_CFLAGS := $(call cc-disable-warning,frame-address)
+KBUILD_CFLAGS += $(FRAME_CFLAGS)
+
 # Do not instrument the tracer itself:
 
 ifdef CONFIG_FUNCTION_TRACER
index 0c05b8a..f3a960e 100644 (file)
@@ -1441,6 +1441,9 @@ static int hist_register_trigger(char *glob, struct event_trigger_ops *ops,
                goto out;
        }
 
+       if (hist_data->attrs->pause)
+               data->paused = true;
+
        if (named_data) {
                destroy_hist_data(data->private_data);
                data->private_data = named_data->private_data;
@@ -1448,9 +1451,6 @@ static int hist_register_trigger(char *glob, struct event_trigger_ops *ops,
                data->ops = &event_hist_trigger_named_ops;
        }
 
-       if (hist_data->attrs->pause)
-               data->paused = true;
-
        if (data->ops->init) {
                ret = data->ops->init(data->ops, data);
                if (ret < 0)
@@ -1500,9 +1500,9 @@ static void hist_unregister_trigger(char *glob, struct event_trigger_ops *ops,
 
 static void hist_unreg_all(struct trace_event_file *file)
 {
-       struct event_trigger_data *test;
+       struct event_trigger_data *test, *n;
 
-       list_for_each_entry_rcu(test, &file->triggers, list) {
+       list_for_each_entry_safe(test, n, &file->triggers, list) {
                if (test->cmd_ops->trigger_type == ETT_EVENT_HIST) {
                        list_del_rcu(&test->list);
                        trace_event_trigger_enable_disable(file, 0);
@@ -1699,9 +1699,9 @@ hist_enable_get_trigger_ops(char *cmd, char *param)
 
 static void hist_enable_unreg_all(struct trace_event_file *file)
 {
-       struct event_trigger_data *test;
+       struct event_trigger_data *test, *n;
 
-       list_for_each_entry_rcu(test, &file->triggers, list) {
+       list_for_each_entry_safe(test, n, &file->triggers, list) {
                if (test->cmd_ops->trigger_type == ETT_HIST_ENABLE) {
                        list_del_rcu(&test->list);
                        update_cond_flag(file);
index e167592..42396a7 100644 (file)
 #include <string.h>
 #include <unistd.h>
 
+/*
+ * glibc synced up and added the metag number but didn't add the relocations.
+ * Work around this in a crude manner for now.
+ */
 #ifndef EM_METAG
-/* Remove this when these make it to the standard system elf.h. */
 #define EM_METAG      174
+#endif
+#ifndef R_METAG_ADDR32
 #define R_METAG_ADDR32                   2
+#endif
+#ifndef R_METAG_NONE
 #define R_METAG_NONE                     3
 #endif