[PATCH 5.4 066/138] bonding: check return value of register_netdevice() in bond_newlink()

From: Greg Kroah-Hartman
Date: Mon Jul 27 2020 - 10:35:06 EST


From: Cong Wang <xiyou.wangcong@xxxxxxxxx>

[ Upstream commit c75d1d5248c0c97996051809ad0e9f154ba5d76e ]

Very similar to commit 544f287b8495
("bonding: check error value of register_netdevice() immediately"),
we should immediately check the return value of register_netdevice()
before doing anything else.

Fixes: 005db31d5f5f ("bonding: set carrier off for devices created through netlink")
Reported-and-tested-by: syzbot+bbc3a11c4da63c1b74d6@xxxxxxxxxxxxxxxxxxxxxxxxx
Cc: Beniamino Galvani <bgalvani@xxxxxxxxxx>
Cc: Taehee Yoo <ap420073@xxxxxxxxx>
Cc: Jay Vosburgh <j.vosburgh@xxxxxxxxx>
Signed-off-by: Cong Wang <xiyou.wangcong@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
drivers/net/bonding/bond_netlink.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index b43b51646b11a..f0f9138e967f3 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
@@ -456,11 +456,10 @@ static int bond_newlink(struct net *src_net, struct net_device *bond_dev,
return err;

err = register_netdevice(bond_dev);
-
- netif_carrier_off(bond_dev);
if (!err) {
struct bonding *bond = netdev_priv(bond_dev);

+ netif_carrier_off(bond_dev);
bond_work_init_all(bond);
}

--
2.25.1