diff options
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 33 |
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: |