• Di Zhu's avatar
    bonding: avoid adding slave device with IFF_MASTER flag · 3c9ef511
    Di Zhu authored
    The following steps will definitely cause the kernel to crash:
    	ip link add vrf1 type vrf table 1
    	modprobe bonding.ko max_bonds=1
    	echo "+vrf1" >/sys/class/net/bond0/bonding/slaves
    	rmmod bonding
    
    The root cause is that: When the VRF is added to the slave device,
    it will fail, and some cleaning work will be done. because VRF device
    has IFF_MASTER flag, cleanup process  will not clear the IFF_BONDING flag.
    Then, when we unload the bonding module, unregister_netdevice_notifier()
    will treat the VRF device as a bond master device and treat netdev_priv()
    as struct bonding{} which actually is struct net_vrf{}.
    
    By analyzing the processing logic of bond_enslave(), it seems that
    it is not allowed to add the slave device with the IFF_MASTER flag, so
    we need to add a code check for this situation.
    Signed-off-by: default avatarDi Zhu <zhudi21@huawei.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3c9ef511
bond_main.c 152 KB