diff options
-rw-r--r-- | net/ipv6/ndisc.c | 9 |
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| |