Skip to content
  • Wilson Kok's avatar
    bridge: use _bh spinlock variant for br_fdb_update to avoid lockup · 1d7c4903
    Wilson Kok authored
    br_fdb_update() can be called in process context in the following way:
    br_fdb_add() -> __br_fdb_add() -> br_fdb_update() (if NTF_USE flag is set)
    so we need to use spin_lock_bh because there are softirq users of the
    hash_lock. One easy way to reproduce this is to modify the bridge utility
    to set NTF_USE, enable stp and then set maxageing to a low value so
    br_fdb_cleanup() is called frequently and then just add new entries in
    a loop. This happens because br_fdb_cleanup() is called from timer/softirq
    context. These locks were _bh before commit f8ae737d
    ("[BRIDGE]: forwarding remove unneeded preempt and bh diasables")
    and at the time that commit was correct because br_fdb_update() couldn't be
    called from process context, but that changed after commit:
    292d1398
    
     ("bridge: add NTF_USE support")
    
    Signed-off-by: default avatarWilson Kok <wkok@cumulusnetworks.com>
    Signed-off-by: default avatarNikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Fixes: 292d1398
    
     ("bridge: add NTF_USE support")
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1d7c4903