|
@@ -883,6 +883,7 @@ static void ndisc_recv_na(struct sk_buff *skb)
|
|
|
offsetof(struct nd_msg, opt));
|
|
|
struct ndisc_options ndopts;
|
|
|
struct net_device *dev = skb->dev;
|
|
|
+ struct inet6_dev *idev = __in6_dev_get(dev);
|
|
|
struct inet6_ifaddr *ifp;
|
|
|
struct neighbour *neigh;
|
|
|
|
|
@@ -902,6 +903,14 @@ static void ndisc_recv_na(struct sk_buff *skb)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ /* For some 802.11 wireless deployments (and possibly other networks),
|
|
|
+ * there will be a NA proxy and unsolicitd packets are attacks
|
|
|
+ * and thus should not be accepted.
|
|
|
+ */
|
|
|
+ if (!msg->icmph.icmp6_solicited && idev &&
|
|
|
+ idev->cnf.drop_unsolicited_na)
|
|
|
+ return;
|
|
|
+
|
|
|
if (!ndisc_parse_options(msg->opt, ndoptlen, &ndopts)) {
|
|
|
ND_PRINTK(2, warn, "NS: invalid ND option\n");
|
|
|
return;
|