mac80211: fix multi-bss related rx handling bug
SVN-Revision: 19260
This commit is contained in:
parent
2920081f48
commit
9237420b79
1 changed files with 72 additions and 0 deletions
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 a new issue