bonding: set random address only when slaves already exist
authorHangbin Liu <liuhangbin@gmail.com>
Wed, 10 Sep 2025 02:43:34 +0000 (02:43 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 16 Sep 2025 00:48:42 +0000 (17:48 -0700)
After commit 5c3bf6cba791 ("bonding: assign random address if device
address is same as bond"), bonding will erroneously randomize the MAC
address of the first interface added to the bond if fail_over_mac =
follow.

Correct this by additionally testing for the bond being empty before
randomizing the MAC.

Fixes: 5c3bf6cba791 ("bonding: assign random address if device address is same as bond")
Reported-by: Qiuling Ren <qren@redhat.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Link: https://patch.msgid.link/20250910024336.400253-1-liuhangbin@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/bonding/bond_main.c

index 257333c8871092e42d6338e631464ad9e3ff5d99..8832bc9f107bc0bf522f940af1cd52e800b715df 100644 (file)
@@ -2132,6 +2132,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
                memcpy(ss.__data, bond_dev->dev_addr, bond_dev->addr_len);
        } else if (bond->params.fail_over_mac == BOND_FOM_FOLLOW &&
                   BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP &&
+                  bond_has_slaves(bond) &&
                   memcmp(slave_dev->dev_addr, bond_dev->dev_addr, bond_dev->addr_len) == 0) {
                /* Set slave to random address to avoid duplicate mac
                 * address in later fail over.