aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c33
1 files changed, 8 insertions, 25 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 6e3b564b6dea..99fb5d80e60a 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -2331,11 +2331,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2331 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames); 2331 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames);
2332 ieee80211_add_pending_skb(local, fwd_skb); 2332 ieee80211_add_pending_skb(local, fwd_skb);
2333 out: 2333 out:
2334 if (is_multicast_ether_addr(hdr->addr1) || 2334 if (is_multicast_ether_addr(hdr->addr1))
2335 sdata->dev->flags & IFF_PROMISC)
2336 return RX_CONTINUE; 2335 return RX_CONTINUE;
2337 else 2336 return RX_DROP_MONITOR;
2338 return RX_DROP_MONITOR;
2339} 2337}
2340#endif 2338#endif
2341 2339
@@ -3266,12 +3264,8 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
3266 if (!bssid && !sdata->u.mgd.use_4addr) 3264 if (!bssid && !sdata->u.mgd.use_4addr)
3267 return false; 3265 return false;
3268 if (!multicast && 3266 if (!multicast &&
3269 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) { 3267 !ether_addr_equal(sdata->vif.addr, hdr->addr1))
3270 if (!(sdata->dev->flags & IFF_PROMISC) || 3268 return false;
3271 sdata->u.mgd.use_4addr)
3272 return false;
3273 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
3274 }
3275 break; 3269 break;
3276 case NL80211_IFTYPE_ADHOC: 3270 case NL80211_IFTYPE_ADHOC:
3277 if (!bssid) 3271 if (!bssid)
@@ -3285,9 +3279,7 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
3285 return false; 3279 return false;
3286 } else if (!multicast && 3280 } else if (!multicast &&
3287 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) { 3281 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
3288 if (!(sdata->dev->flags & IFF_PROMISC)) 3282 return false;
3289 return false;
3290 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
3291 } else if (!rx->sta) { 3283 } else if (!rx->sta) {
3292 int rate_idx; 3284 int rate_idx;
3293 if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT)) 3285 if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT))
@@ -3309,12 +3301,7 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
3309 } else if (!multicast && 3301 } else if (!multicast &&
3310 !ether_addr_equal(sdata->dev->dev_addr, 3302 !ether_addr_equal(sdata->dev->dev_addr,
3311 hdr->addr1)) { 3303 hdr->addr1)) {
3312 /* if we are in promisc mode we also accept 3304 return false;
3313 * packets not destined for us
3314 */
3315 if (!(sdata->dev->flags & IFF_PROMISC))
3316 return false;
3317 rx->flags &= ~IEEE80211_RX_RA_MATCH;
3318 } else if (!rx->sta) { 3305 } else if (!rx->sta) {
3319 int rate_idx; 3306 int rate_idx;
3320 if (status->flag & RX_FLAG_HT) 3307 if (status->flag & RX_FLAG_HT)
@@ -3327,12 +3314,8 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
3327 break; 3314 break;
3328 case NL80211_IFTYPE_MESH_POINT: 3315 case NL80211_IFTYPE_MESH_POINT:
3329 if (!multicast && 3316 if (!multicast &&
3330 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) { 3317 !ether_addr_equal(sdata->vif.addr, hdr->addr1))
3331 if (!(sdata->dev->flags & IFF_PROMISC)) 3318 return false;
3332 return false;
3333
3334 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
3335 }
3336 break; 3319 break;
3337 case NL80211_IFTYPE_AP_VLAN: 3320 case NL80211_IFTYPE_AP_VLAN:
3338 case NL80211_IFTYPE_AP: 3321 case NL80211_IFTYPE_AP: