]> git.baikalelectronics.ru Git - kernel.git/commit
ftrace: Fix updating FTRACE_FL_TRAMP
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Thu, 26 Nov 2020 18:08:38 +0000 (23:38 +0530)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Tue, 1 Dec 2020 02:43:07 +0000 (21:43 -0500)
commit25de3a2c5be9226a82951cad0a49f292a3d39fb5
tree13e45096d296f3e15355b12de8aeaf5cf10b3ab9
parentd00826804a8ca1ec801f833fd315b23082d8abc8
ftrace: Fix updating FTRACE_FL_TRAMP

On powerpc, kprobe-direct.tc triggered FTRACE_WARN_ON() in
ftrace_get_addr_new() followed by the below message:
  Bad trampoline accounting at: 000000004222522f (wake_up_process+0xc/0x20) (f0000001)

The set of steps leading to this involved:
- modprobe ftrace-direct-too
- enable_probe
- modprobe ftrace-direct
- rmmod ftrace-direct <-- trigger

The problem turned out to be that we were not updating flags in the
ftrace record properly. From the above message about the trampoline
accounting being bad, it can be seen that the ftrace record still has
FTRACE_FL_TRAMP set though ftrace-direct module is going away. This
happens because we are checking if any ftrace_ops has the
FTRACE_FL_TRAMP flag set _before_ updating the filter hash.

The fix for this is to look for any _other_ ftrace_ops that also needs
FTRACE_FL_TRAMP.

Link: https://lkml.kernel.org/r/56c113aa9c3e10c19144a36d9684c7882bf09af5.1606412433.git.naveen.n.rao@linux.vnet.ibm.com
Cc: stable@vger.kernel.org
Fixes: f58a6d4b72169 ("ftrace: Enable trampoline when rec count returns back to one")
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/ftrace.c