lkml.org 
[lkml]   [2015]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[RFC][PATCH 3/9] module: Annotate module version magic
Due to the new lockdep checks we go:

[ 9.759380] ------------[ cut here ]------------
[ 9.759389] WARNING: CPU: 31 PID: 597 at ../kernel/module.c:216 each_symbol_section+0x121/0x130()
[ 9.759391] Modules linked in:
[ 9.759393] CPU: 31 PID: 597 Comm: modprobe Not tainted 4.0.0-rc1+ #65
[ 9.759393] Hardware name: Intel Corporation S2600GZ/S2600GZ, BIOS SE5C600.86B.02.02.0002.122320131210 12/23/2013
[ 9.759396] ffffffff817d8676 ffff880424567ca8 ffffffff8157e98b 0000000000000001
[ 9.759398] 0000000000000000 ffff880424567ce8 ffffffff8105fbc7 ffff880424567cd8
[ 9.759400] 0000000000000000 ffffffff810ec160 ffff880424567d40 0000000000000000
[ 9.759400] Call Trace:
[ 9.759407] [<ffffffff8157e98b>] dump_stack+0x4f/0x7b
[ 9.759410] [<ffffffff8105fbc7>] warn_slowpath_common+0x97/0xe0
[ 9.759412] [<ffffffff810ec160>] ? section_objs+0x60/0x60
[ 9.759414] [<ffffffff8105fc2a>] warn_slowpath_null+0x1a/0x20
[ 9.759415] [<ffffffff810ed9c1>] each_symbol_section+0x121/0x130
[ 9.759417] [<ffffffff810eda01>] find_symbol+0x31/0x70
[ 9.759420] [<ffffffff810ef5bf>] load_module+0x20f/0x2660
[ 9.759422] [<ffffffff8104ef10>] ? __do_page_fault+0x190/0x4e0
[ 9.759426] [<ffffffff815880ec>] ? retint_restore_args+0x13/0x13
[ 9.759427] [<ffffffff815880ec>] ? retint_restore_args+0x13/0x13
[ 9.759433] [<ffffffff810ae73d>] ? trace_hardirqs_on_caller+0x11d/0x1e0
[ 9.759437] [<ffffffff812fcc0e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
[ 9.759439] [<ffffffff815880ec>] ? retint_restore_args+0x13/0x13
[ 9.759441] [<ffffffff810f1ade>] SyS_init_module+0xce/0x100
[ 9.759443] [<ffffffff81587429>] system_call_fastpath+0x12/0x17
[ 9.759445] ---[ end trace 9294429076a9c644 ]---

As per the comment this site should be fine, but lets wrap it in
preempt_disable() anyhow to placate lockdep.

Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
kernel/module.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)

--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1192,11 +1192,17 @@ static inline int check_modstruct_versio
{
const unsigned long *crc;

- /* Since this should be found in kernel (which can't be removed),
- * no locking is necessary. */
+ /*
+ * Since this should be found in kernel (which can't be removed),
+ * no locking is necessary.
+ */
+ preempt_disable();
if (!find_symbol(VMLINUX_SYMBOL_STR(module_layout), NULL,
- &crc, true, false))
+ &crc, true, false)) {
+ preempt_enable();
BUG();
+ }
+ preempt_enable();
return check_version(sechdrs, versindex,
VMLINUX_SYMBOL_STR(module_layout), mod, crc,
NULL);



\
 
 \ /
  Last update: 2015-02-28 23:01    [W:0.463 / U:1.036 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site