]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
bonding: don't set oif to bond dev when getting NS target destination
authorHangbin Liu <liuhangbin@gmail.com>
Tue, 16 Sep 2025 08:01:26 +0000 (08:01 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Sep 2025 09:16:44 +0000 (11:16 +0200)
[ Upstream commit a8ba87f04ca9cdec06776ce92dce1395026dc3bb ]

Unlike IPv4, IPv6 routing strictly requires the source address to be valid
on the outgoing interface. If the NS target is set to a remote VLAN interface,
and the source address is also configured on a VLAN over a bond interface,
setting the oif to the bond device will fail to retrieve the correct
destination route.

Fix this by not setting the oif to the bond device when retrieving the NS
target destination. This allows the correct destination device (the VLAN
interface) to be determined, so that bond_verify_device_path can return the
proper VLAN tags for sending NS messages.

Reported-by: David Wilder <wilder@us.ibm.com>
Closes: https://lore.kernel.org/netdev/aGOKggdfjv0cApTO@fedora/
Suggested-by: Jay Vosburgh <jv@jvosburgh.net>
Tested-by: David Wilder <wilder@us.ibm.com>
Acked-by: Jay Vosburgh <jv@jvosburgh.net>
Fixes: 4e24be018eb9 ("bonding: add new parameter ns_targets")
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Link: https://patch.msgid.link/20250916080127.430626-1-liuhangbin@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/bonding/bond_main.c

index e413340be2bff6c4208f7fae9a1e1aa178115e9d..e23195dd747769c40b6d0dbd9cb2212c823c1b0a 100644 (file)
@@ -3339,7 +3339,6 @@ static void bond_ns_send_all(struct bonding *bond, struct slave *slave)
                /* Find out through which dev should the packet go */
                memset(&fl6, 0, sizeof(struct flowi6));
                fl6.daddr = targets[i];
-               fl6.flowi6_oif = bond->dev->ifindex;
 
                dst = ip6_route_output(dev_net(bond->dev), NULL, &fl6);
                if (dst->error) {