Skip to content

Commit 592335a

Browse files
liuhangbindavem330
authored andcommitted
bonding: accept unsolicited NA message
The unsolicited NA message with all-nodes multicast dest address should be valid, as this also means the link could reach the target. Also rename bond_validate_ns() to bond_validate_na(). Reported-by: LiLiang <liali@redhat.com> Fixes: 5e1eeef ("bonding: NS target should accept link local address") Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent fd16eb9 commit 592335a

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

drivers/net/bonding/bond_main.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,12 +3201,19 @@ static bool bond_has_this_ip6(struct bonding *bond, struct in6_addr *addr)
32013201
return ret;
32023202
}
32033203

3204-
static void bond_validate_ns(struct bonding *bond, struct slave *slave,
3204+
static void bond_validate_na(struct bonding *bond, struct slave *slave,
32053205
struct in6_addr *saddr, struct in6_addr *daddr)
32063206
{
32073207
int i;
32083208

3209-
if (ipv6_addr_any(saddr) || !bond_has_this_ip6(bond, daddr)) {
3209+
/* Ignore NAs that:
3210+
* 1. Source address is unspecified address.
3211+
* 2. Dest address is neither all-nodes multicast address nor
3212+
* exist on bond interface.
3213+
*/
3214+
if (ipv6_addr_any(saddr) ||
3215+
(!ipv6_addr_equal(daddr, &in6addr_linklocal_allnodes) &&
3216+
!bond_has_this_ip6(bond, daddr))) {
32103217
slave_dbg(bond->dev, slave->dev, "%s: sip %pI6c tip %pI6c not found\n",
32113218
__func__, saddr, daddr);
32123219
return;
@@ -3249,14 +3256,14 @@ static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond,
32493256
* see bond_arp_rcv().
32503257
*/
32513258
if (bond_is_active_slave(slave))
3252-
bond_validate_ns(bond, slave, saddr, daddr);
3259+
bond_validate_na(bond, slave, saddr, daddr);
32533260
else if (curr_active_slave &&
32543261
time_after(slave_last_rx(bond, curr_active_slave),
32553262
curr_active_slave->last_link_up))
3256-
bond_validate_ns(bond, slave, saddr, daddr);
3263+
bond_validate_na(bond, slave, saddr, daddr);
32573264
else if (curr_arp_slave &&
32583265
bond_time_in_interval(bond, slave_last_tx(curr_arp_slave), 1))
3259-
bond_validate_ns(bond, slave, saddr, daddr);
3266+
bond_validate_na(bond, slave, saddr, daddr);
32603267

32613268
out:
32623269
return RX_HANDLER_ANOTHER;

0 commit comments

Comments
 (0)