|
@@ -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|
|