mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-01-24 01:01:06 +02:00
mac80211: fix multi-bss related rx handling bug
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19260 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
8b8b497586
commit
44a35be85c
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…
x
Reference in New Issue
Block a user