mirror of https://gitee.com/openkylin/linux.git
[BOND]: Fix bond_init() error path handling.
From: Florin Malita <fmalita@gmail.com> bond_init() is not releasing rtnl_sem after register_netdevice() and before calling unregister_netdevice() (from bond_free_all()) in the exception path. As the device registration is not completed (dev->reg_state == NETREG_REGISTERING), the call to unregister_netdevice() triggers BUG_ON(dev->reg_state != NETREG_REGISTERED). Signed-off-by: Florin Malita <fmalita@gmail.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
88f964db6e
commit
40abc27066
|
@ -5039,6 +5039,14 @@ static int __init bonding_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_err:
|
out_err:
|
||||||
|
/*
|
||||||
|
* rtnl_unlock() will run netdev_run_todo(), putting the
|
||||||
|
* thus-far-registered bonding devices into a state which
|
||||||
|
* unregigister_netdevice() will accept
|
||||||
|
*/
|
||||||
|
rtnl_unlock();
|
||||||
|
rtnl_lock();
|
||||||
|
|
||||||
/* free and unregister all bonds that were successfully added */
|
/* free and unregister all bonds that were successfully added */
|
||||||
bond_free_all();
|
bond_free_all();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue