if (ieee80211_vif_is_mesh(&rx->sdata->vif))
return ieee80211_rx_mesh_check(rx);
+ /*
+ * Wi-Fi Aware (TM) 4.0 specification 6.2.5:
+ * For NAN_DATA, unicast data frames must have A2 (source)
+ * assigned to an active NDP. If not the frame must be dropped
+ * and NAN Data Path termination frame should be sent. Notify
+ * user space so it can do so.
+ */
+ if (rx->sdata->vif.type == NL80211_IFTYPE_NAN_DATA) {
+ if (ieee80211_is_data(hdr->frame_control) &&
+ !is_multicast_ether_addr(hdr->addr1) &&
+ (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC))) {
+ if (cfg80211_rx_spurious_frame(rx->sdata->dev, hdr->addr2,
+ rx->link_id, GFP_ATOMIC))
+ return RX_DROP_U_SPURIOUS_NOTIF;
+ return RX_DROP_U_SPURIOUS;
+ }
+ return RX_CONTINUE;
+ }
+
if (unlikely((ieee80211_is_data(hdr->frame_control) ||
ieee80211_is_pspoll(hdr->frame_control)) &&
rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&