Skip to content
Snippets Groups Projects
  • Masami Hiramatsu's avatar
    968b1b03
    tracing/kprobe: Fix to support kretprobe events on unloaded modules · 968b1b03
    Masami Hiramatsu authored
    commit 97c753e6 upstream.
    
    Fix kprobe_on_func_entry() returns error code instead of false so that
    register_kretprobe() can return an appropriate error code.
    
    append_trace_kprobe() expects the kprobe registration returns -ENOENT
    when the target symbol is not found, and it checks whether the target
    module is unloaded or not. If the target module doesn't exist, it
    defers to probe the target symbol until the module is loaded.
    
    However, since register_kretprobe() returns -EINVAL instead of -ENOENT
    in that case, it always fail on putting the kretprobe event on unloaded
    modules. e.g.
    
    Kprobe event:
    /sys/kernel/debug/tracing # echo p xfs:xfs_end_io >> kprobe_events
    [   16.515574] trace_kprobe: This probe might be able to register after target module is loaded. Continue.
    
    Kretprobe event: (p -> r)
    /sys/kernel/debug/tracing # echo r xfs:xfs_end_io >> kprobe_events
    sh: write error: Invalid argument
    /sys/kernel/debug/tracing # cat error_log
    [   41.122514] trace_kprobe: error: Failed to register probe event
      Command: r xfs:xfs_end_io
                 ^
    
    To fix this bug, change kprobe_on_func_entry() to detect symbol lookup
    failure and return -ENOENT in that case. Otherwise it returns -EINVAL
    or 0 (succeeded, given address is on the entry).
    
    Link: https://lkml.kernel.org/r/161176187132.1067016.8118042342894378981.stgit@devnote2
    
    
    
    Cc: stable@vger.kernel.org
    Fixes: 59158ec4 ("tracing/kprobes: Check the probe on unloaded module correctly")
    Reported-by: default avatarJianlin Lv <Jianlin.Lv@arm.com>
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    968b1b03
    History
    tracing/kprobe: Fix to support kretprobe events on unloaded modules
    Masami Hiramatsu authored
    commit 97c753e6 upstream.
    
    Fix kprobe_on_func_entry() returns error code instead of false so that
    register_kretprobe() can return an appropriate error code.
    
    append_trace_kprobe() expects the kprobe registration returns -ENOENT
    when the target symbol is not found, and it checks whether the target
    module is unloaded or not. If the target module doesn't exist, it
    defers to probe the target symbol until the module is loaded.
    
    However, since register_kretprobe() returns -EINVAL instead of -ENOENT
    in that case, it always fail on putting the kretprobe event on unloaded
    modules. e.g.
    
    Kprobe event:
    /sys/kernel/debug/tracing # echo p xfs:xfs_end_io >> kprobe_events
    [   16.515574] trace_kprobe: This probe might be able to register after target module is loaded. Continue.
    
    Kretprobe event: (p -> r)
    /sys/kernel/debug/tracing # echo r xfs:xfs_end_io >> kprobe_events
    sh: write error: Invalid argument
    /sys/kernel/debug/tracing # cat error_log
    [   41.122514] trace_kprobe: error: Failed to register probe event
      Command: r xfs:xfs_end_io
                 ^
    
    To fix this bug, change kprobe_on_func_entry() to detect symbol lookup
    failure and return -ENOENT in that case. Otherwise it returns -EINVAL
    or 0 (succeeded, given address is on the entry).
    
    Link: https://lkml.kernel.org/r/161176187132.1067016.8118042342894378981.stgit@devnote2
    
    
    
    Cc: stable@vger.kernel.org
    Fixes: 59158ec4 ("tracing/kprobes: Check the probe on unloaded module correctly")
    Reported-by: default avatarJianlin Lv <Jianlin.Lv@arm.com>
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.