mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-11-19 23:17:53 +01:00
mac80211: fix multi-bss related rx handling bug
SVN-Revision: 19260
This commit is contained in:
parent
2920081f48
commit
9237420b79
72
package/mac80211/patches/580-mac80211_rxdata_fix.patch
Normal file
72
package/mac80211/patches/580-mac80211_rxdata_fix.patch
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
--- a/net/mac80211/rx.c
|
||||||
|
+++ b/net/mac80211/rx.c
|
||||||
|
@@ -2348,22 +2348,6 @@ static void __ieee80211_rx_handle_packet
|
||||||
|
sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
- rx.sta = sta_info_get(sdata, hdr->addr2);
|
||||||
|
-
|
||||||
|
- rx.flags |= IEEE80211_RX_RA_MATCH;
|
||||||
|
- prepares = prepare_for_handlers(sdata, &rx, hdr);
|
||||||
|
-
|
||||||
|
- if (!prepares)
|
||||||
|
- continue;
|
||||||
|
-
|
||||||
|
- if (status->flag & RX_FLAG_MMIC_ERROR) {
|
||||||
|
- rx.sdata = sdata;
|
||||||
|
- if (rx.flags & IEEE80211_RX_RA_MATCH)
|
||||||
|
- ieee80211_rx_michael_mic_report(hdr,
|
||||||
|
- &rx);
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* frame is destined for this interface, but if it's
|
||||||
|
* not also for the previous one we handle that after
|
||||||
|
@@ -2375,6 +2359,22 @@ static void __ieee80211_rx_handle_packet
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ rx.sta = sta_info_get(prev, hdr->addr2);
|
||||||
|
+
|
||||||
|
+ rx.flags |= IEEE80211_RX_RA_MATCH;
|
||||||
|
+ prepares = prepare_for_handlers(prev, &rx, hdr);
|
||||||
|
+
|
||||||
|
+ if (!prepares)
|
||||||
|
+ goto next;
|
||||||
|
+
|
||||||
|
+ if (status->flag & RX_FLAG_MMIC_ERROR) {
|
||||||
|
+ rx.sdata = prev;
|
||||||
|
+ if (rx.flags & IEEE80211_RX_RA_MATCH)
|
||||||
|
+ ieee80211_rx_michael_mic_report(hdr,
|
||||||
|
+ &rx);
|
||||||
|
+ goto next;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* frame was destined for the previous interface
|
||||||
|
* so invoke RX handlers for it
|
||||||
|
@@ -2387,11 +2387,22 @@ static void __ieee80211_rx_handle_packet
|
||||||
|
"multicast frame for %s\n",
|
||||||
|
wiphy_name(local->hw.wiphy),
|
||||||
|
prev->name);
|
||||||
|
- continue;
|
||||||
|
+ goto next;
|
||||||
|
}
|
||||||
|
ieee80211_invoke_rx_handlers(prev, &rx, skb_new, rate);
|
||||||
|
+next:
|
||||||
|
prev = sdata;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (prev) {
|
||||||
|
+ rx.sta = sta_info_get(prev, hdr->addr2);
|
||||||
|
+
|
||||||
|
+ rx.flags |= IEEE80211_RX_RA_MATCH;
|
||||||
|
+ prepares = prepare_for_handlers(prev, &rx, hdr);
|
||||||
|
+
|
||||||
|
+ if (!prepares)
|
||||||
|
+ prev = NULL;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
if (prev)
|
||||||
|
ieee80211_invoke_rx_handlers(prev, &rx, skb, rate);
|
Loading…
Reference in New Issue
Block a user