• Hangbin Liu's avatar
    team: fix possible recursive locking when add slaves · 925b0c84
    Hangbin Liu authored
    If we add a bond device which is already the master of the team interface,
    we will hold the team->lock in team_add_slave() first and then request the
    lock in team_set_mac_address() again. The functions are called like:
    
    - team_add_slave()
     - team_port_add()
       - team_port_enter()
         - team_modeop_port_enter()
           - __set_port_dev_addr()
             - dev_set_mac_address()
               - bond_set_mac_address()
                 - dev_set_mac_address()
      	       - team_set_mac_address
    
    Although team_upper_dev_link() would check the upper devices but it is
    called too late. Fix it by adding a checking before processing the slave.
    
    v2: Do not split the string in netdev_err()
    
    Fixes: 3d249d4c ("net: introduce ethernet teaming device")
    Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    925b0c84
team.c 71.5 KB