• Steven Rostedt (VMware)'s avatar
    ftrace: Fix memleak when unregistering dynamic ops when tracing disabled · 100553e1
    Steven Rostedt (VMware) authored
    commit edb096e0 upstream.
    
    If function tracing is disabled by the user via the function-trace option or
    the proc sysctl file, and a ftrace_ops that was allocated on the heap is
    unregistered, then the shutdown code exits out without doing the proper
    clean up. This was found via kmemleak and running the ftrace selftests, as
    one of the tests unregisters with function tracing disabled.
    
     # cat kmemleak
    unreferenced object 0xffffffffa0020000 (size 4096):
      comm "swapper/0", pid 1, jiffies 4294668889 (age 569.209s)
      hex dump (first 32 bytes):
        55 ff 74 24 10 55 48 89 e5 ff 74 24 18 55 48 89  U.t$.UH...t$.UH.
        e5 48 81 ec a8 00 00 00 48 89 44 24 50 48 89 4c  .H......H.D$PH.L
      backtrace:
        [<ffffffff81d64665>] kmemleak_vmalloc+0x85/0xf0
        [<ffffffff81355631>] __vmalloc_node_range+0x281/0x3e0
        [<ffffffff8109697f>] module_alloc+0x4f/0x90
        [<ffffffff81091170>] arch_ftrace_update_trampoline+0x160/0x420
        [<ffffffff81249947>] ftrace_startup+0xe7/0x300
        [<ffffffff81249bd2>] register_ftrace_function+0x72/0x90
        [<ffffffff81263786>] trace_selftest_ops+0x204/0x397
        [<ffffffff82bb8971>] trace_selftest_startup_function+0x394/0x624
        [<ffffffff81263a75>] run_tracer_selftest+0x15c/0x1d7
        [<ffffffff82bb83f1>] init_trace_selftests+0x75/0x192
        [<ffffffff81002230>] do_one_initcall+0x90/0x1e2
        [<ffffffff82b7d620>] kernel_init_freeable+0x350/0x3fe
        [<ffffffff81d61ec3>] kernel_init+0x13/0x122
        [<ffffffff81d72c6a>] ret_from_fork+0x2a/0x40
        [<ffffffffffffffff>] 0xffffffffffffffff
    
    Fixes: 12cce594 ("ftrace/x86: Allow !CONFIG_PREEMPT dynamic ops to use allocated trampolines")
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    100553e1
ftrace.c 141 KB