Skip to content
  • Ying Xue's avatar
    tipc: fix suspicious RCU usage · 66d95b67
    Ying Xue authored
    When run tipcTS&tipcTC test suite, the following complaint appears:
    
    [   56.926168] ===============================
    [   56.926169] [ INFO: suspicious RCU usage. ]
    [   56.926171] 4.7.0-rc1+ #160 Not tainted
    [   56.926173] -------------------------------
    [   56.926174] net/tipc/bearer.c:408 suspicious rcu_dereference_protected() usage!
    [   56.926175]
    [   56.926175] other info that might help us debug this:
    [   56.926175]
    [   56.926177]
    [   56.926177] rcu_scheduler_active = 1, debug_locks = 1
    [   56.926179] 3 locks held by swapper/4/0:
    [   56.926180]  #0:  (((&req->timer))){+.-...}, at: [<ffffffff810e79b5>] call_timer_fn+0x5/0x340
    [   56.926203]  #1:  (&(&req->lock)->rlock){+.-...}, at: [<ffffffffa000c29b>] disc_timeout+0x1b/0xd0 [tipc]
    [   56.926212]  #2:  (rcu_read_lock){......}, at: [<ffffffffa00055e0>] tipc_bearer_xmit_skb+0xb0/0x2e0 [tipc]
    [   56.926218]
    [   56.926218] stack backtrace:
    [   56.926221] CPU: 4 PID: 0 Comm: swapper/4 Not tainted 4.7.0-rc1+ #160
    [   56.926222] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
    [   56.926224]  0000000000000000 ffff880016803d28 ffffffff813c4423 ffff8800154252c0
    [   56.926227]  0000000000000001 ffff880016803d58 ffffffff810b7512 ffff8800124d8120
    [   56.926230]  ffff880013f8a160 ffff8800132b5ccc ffff8800124d8120 ffff880016803d88
    [   56.926234] Call Trace:
    [   56.926235]  <IRQ>  [<ffffffff813c4423>] dump_stack+0x67/0x94
    [   56.926250]  [<ffffffff810b7512>] lockdep_rcu_suspicious+0xe2/0x120
    [   56.926256]  [<ffffffffa00051f1>] tipc_l2_send_msg+0x131/0x1c0 [tipc]
    [   56.926261]  [<ffffffffa000567c>] tipc_bearer_xmit_skb+0x14c/0x2e0 [tipc]
    [   56.926266]  [<ffffffffa00055e0>] ? tipc_bearer_xmit_skb+0xb0/0x2e0 [tipc]
    [   56.926273]  [<ffffffffa000c280>] ? tipc_disc_init_msg+0x1f0/0x1f0 [tipc]
    [   56.926278]  [<ffffffffa000c280>] ? tipc_disc_init_msg+0x1f0/0x1f0 [tipc]
    [   56.926283]  [<ffffffffa000c2d6>] disc_timeout+0x56/0xd0 [tipc]
    [   56.926288]  [<ffffffff810e7a68>] call_timer_fn+0xb8/0x340
    [   56.926291]  [<ffffffff810e79b5>] ? call_timer_fn+0x5/0x340
    [   56.926296]  [<ffffffffa000c280>] ? tipc_disc_init_msg+0x1f0/0x1f0 [tipc]
    [   56.926300]  [<ffffffff810e8f4a>] run_timer_softirq+0x23a/0x390
    [   56.926306]  [<ffffffff810f89ff>] ? clockevents_program_event+0x7f/0x130
    [   56.926316]  [<ffffffff819727c3>] __do_softirq+0xc3/0x4a2
    [   56.926323]  [<ffffffff8106ba5a>] irq_exit+0x8a/0xb0
    [   56.926327]  [<ffffffff81972456>] smp_apic_timer_interrupt+0x46/0x60
    [   56.926331]  [<ffffffff81970a49>] apic_timer_interrupt+0x89/0x90
    [   56.926333]  <EOI>  [<ffffffff81027fda>] ? default_idle+0x2a/0x1a0
    [   56.926340]  [<ffffffff81027fd8>] ? default_idle+0x28/0x1a0
    [   56.926342]  [<ffffffff810289cf>] arch_cpu_idle+0xf/0x20
    [   56.926345]  [<ffffffff810adf0f>] default_idle_call+0x2f/0x50
    [   56.926347]  [<ffffffff810ae145>] cpu_startup_entry+0x215/0x3e0
    [   56.926353]  [<ffffffff81040ad9>] start_secondary+0xf9/0x100
    
    The warning appears as rtnl_dereference() is wrongly used in
    tipc_l2_send_msg() under RCU read lock protection. Instead the proper
    usage should be that rcu_dereference_rtnl() is called here.
    
    Fixes: 5b7066c3
    
     ("tipc: stricter filtering of packets in bearer layer")
    Acked-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    66d95b67