diff --git a/[refs] b/[refs] index c64f2bae6c08..6d02688aa92b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 74553b09dcd9194cbda737016f0b89f245145670 +refs/heads/master: 5f3e6e9e19f50a6910aec2dbd479187aabba04b7 diff --git a/trunk/net/ipv6/ndisc.c b/trunk/net/ipv6/ndisc.c index ed01f9a330d6..0e0d6ce69021 100644 --- a/trunk/net/ipv6/ndisc.c +++ b/trunk/net/ipv6/ndisc.c @@ -952,6 +952,15 @@ static void ndisc_recv_na(struct sk_buff *skb) if (neigh->nud_state & NUD_FAILED) goto out; + /* + * Don't update the neighbor cache entry on a proxy NA from + * ourselves because either the proxied node is off link or it + * has already sent a NA to us. + */ + if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) && + pneigh_lookup(&nd_tbl, &msg->target, dev, 0)) + goto out; + neigh_update(neigh, lladdr, msg->icmph.icmp6_solicited ? NUD_REACHABLE : NUD_STALE, NEIGH_UPDATE_F_WEAK_OVERRIDE|