aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv6/ndisc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index ed01f9a330d6..0e0d6ce69021 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -952,6 +952,15 @@ static void ndisc_recv_na(struct sk_buff *skb)
952 if (neigh->nud_state & NUD_FAILED) 952 if (neigh->nud_state & NUD_FAILED)
953 goto out; 953 goto out;
954 954
955 /*
956 * Don't update the neighbor cache entry on a proxy NA from
957 * ourselves because either the proxied node is off link or it
958 * has already sent a NA to us.
959 */
960 if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) &&
961 pneigh_lookup(&nd_tbl, &msg->target, dev, 0))
962 goto out;
963
955 neigh_update(neigh, lladdr, 964 neigh_update(neigh, lladdr,
956 msg->icmph.icmp6_solicited ? NUD_REACHABLE : NUD_STALE, 965 msg->icmph.icmp6_solicited ? NUD_REACHABLE : NUD_STALE,
957 NEIGH_UPDATE_F_WEAK_OVERRIDE| 966 NEIGH_UPDATE_F_WEAK_OVERRIDE|