Re: [RFC][PATCH 3/9] module: Annotate module version magic

From: Paul E. McKenney
Date: Mon Mar 02 2015 - 14:38:42 EST


On Sat, Feb 28, 2015 at 10:24:50PM +0100, Peter Zijlstra wrote:
> 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@xxxxxxxxxxxxxxx>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>

Acked-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>

> ---
> 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);
>
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/