• S
    module: Move RO/NX module protection to after ftrace module update · 94462ad3
    Steven Rostedt 提交于
    The commit:
    
    84e1c6bb
    x86: Add RO/NX protection for loadable kernel modules
    
    Broke the function tracer with this output:
    
    ------------[ cut here ]------------
    WARNING: at kernel/trace/ftrace.c:1014 ftrace_bug+0x114/0x171()
    Hardware name: Precision WorkStation 470
    Modules linked in: i2c_core(+)
    Pid: 86, comm: modprobe Not tainted 2.6.37-rc2+ #68
    Call Trace:
     [<ffffffff8104e957>] warn_slowpath_common+0x85/0x9d
     [<ffffffffa00026db>] ? __process_new_adapter+0x7/0x34 [i2c_core]
     [<ffffffffa00026db>] ? __process_new_adapter+0x7/0x34 [i2c_core]
     [<ffffffff8104e989>] warn_slowpath_null+0x1a/0x1c
     [<ffffffff810a9dfe>] ftrace_bug+0x114/0x171
     [<ffffffffa00026db>] ? __process_new_adapter+0x7/0x34 [i2c_core]
     [<ffffffff810aa0db>] ftrace_process_locs+0x1ae/0x274
     [<ffffffffa00026db>] ? __process_new_adapter+0x7/0x34 [i2c_core]
     [<ffffffff810aa29e>] ftrace_module_notify+0x39/0x44
     [<ffffffff814405cf>] notifier_call_chain+0x37/0x63
     [<ffffffff8106e054>] __blocking_notifier_call_chain+0x46/0x5b
     [<ffffffff8106e07d>] blocking_notifier_call_chain+0x14/0x16
     [<ffffffff8107ffde>] sys_init_module+0x73/0x1f3
     [<ffffffff8100acf2>] system_call_fastpath+0x16/0x1b
    ---[ end trace 2aff4f4ca53ec746 ]---
    ftrace faulted on writing [<ffffffffa00026db>]
    __process_new_adapter+0x7/0x34 [i2c_core]
    
    The cause was that the module text was set to read only before ftrace
    could convert the calls to mcount to nops. Thus, the conversions failed
    due to not being able to write to the text locations.
    
    The simple fix is to move setting the module to read only after the
    module notifiers are called (where ftrace sets the module mcounts to nops).
    Reported-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: NRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
    94462ad3
module.c 87.7 KB