• Masami Hiramatsu's avatar
    module: add within_module_core() and within_module_init() · a06f6211
    Masami Hiramatsu authored
    This series of patches allows kprobes to probe module's __init and __exit
    functions.  This means, you can probe driver initialization and
    terminating.
    
    Currently, kprobes can't probe __init function because these functions are
    freed after module initialization.  And it also can't probe module __exit
    functions because kprobe increments reference count of target module and
    user can't unload it.  this means __exit functions never be called unless
    removing probes from the module.
    
    To solve both cases, this series of patches introduces GONE flag and sets
    it when the target code is freed(for this purpose, kprobes hooks
    MODULE_STATE_* events).  This also removes refcount incrementing for
    allowing user to unload target module.  Users can check which probes are
    GONE by debugfs interface.  For taking timing of freeing module's .init
    text, these also include a patch which adds module's notifier of
    MODULE_STATE_LIVE event.
    
    This patch:
    
    Add within_module_core() and within_module_init() for checking whether an
    address is in the module .init.text section or .text section, and replace
    within() local inline functions in kernel/module.c with them.
    
    kprobes uses these functions to check where the kprobe is inserted.
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
    Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
    Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
    Acked-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a06f6211
module.c 71.6 KB