• Eric Dumazet's avatar
    net: dont call jump_label_dec from irq context · b90e5794
    Eric Dumazet authored
    Igor Maravic reported an error caused by jump_label_dec() being called
    from IRQ context :
    
     BUG: sleeping function called from invalid context at kernel/mutex.c:271
     in_atomic(): 1, irqs_disabled(): 0, pid: 0, name: swapper
     1 lock held by swapper/0:
      #0:  (&n->timer){+.-...}, at: [<ffffffff8107ce90>] call_timer_fn+0x0/0x340
     Pid: 0, comm: swapper Not tainted 3.2.0-rc2-net-next-mpls+ #1
    Call Trace:
     <IRQ>  [<ffffffff8104f417>] __might_sleep+0x137/0x1f0
     [<ffffffff816b9a2f>] mutex_lock_nested+0x2f/0x370
     [<ffffffff810a89fd>] ? trace_hardirqs_off+0xd/0x10
     [<ffffffff8109a37f>] ? local_clock+0x6f/0x80
     [<ffffffff810a90a5>] ? lock_release_holdtime.part.22+0x15/0x1a0
     [<ffffffff81557929>] ? sock_def_write_space+0x59/0x160
     [<ffffffff815e936e>] ? arp_error_report+0x3e/0x90
     [<ffffffff810969cd>] atomic_dec_and_mutex_lock+0x5d/0x80
     [<ffffffff8112fc1d>] jump_label_dec+0x1d/0x50
     [<ffffffff81566525>] net_disable_timestamp+0x15/0x20
     [<ffffffff81557a75>] sock_disable_timestamp+0x45/0x50
     [<ffffffff81557b00>] __sk_free+0x80/0x200
     [<ffffffff815578d0>] ? sk_send_sigurg+0x70/0x70
     [<ffffffff815e936e>] ? arp_error_report+0x3e/0x90
     [<ffffffff81557cba>] sock_wfree+0x3a/0x70
     [<ffffffff8155c2b0>] skb_release_head_state+0x70/0x120
     [<ffffffff8155c0b6>] __kfree_skb+0x16/0x30
     [<ffffffff8155c119>] kfree_skb+0x49/0x170
     [<ffffffff815e936e>] arp_error_report+0x3e/0x90
     [<ffffffff81575bd9>] neigh_invalidate+0x89/0xc0
     [<ffffffff81578dbe>] neigh_timer_handler+0x9e/0x2a0
     [<ffffffff81578d20>] ? neigh_update+0x640/0x640
     [<ffffffff81073558>] __do_softirq+0xc8/0x3a0
    
    Since jump_label_{inc|dec} must be called from process context only,
    we must defer jump_label_dec() if net_disable_timestamp() is called
    from interrupt context.
    Reported-by: default avatarIgor Maravic <igorm@etf.rs>
    Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b90e5794
dev.c 160 KB