Преглед изворни кода

mac80211: fix an endian issue in BlockAckReq handling

SVN-Revision: 28190
Felix Fietkau пре 14 година
родитељ
комит
5da0d9dda1
1 измењених фајлова са 16 додато и 3 уклоњено
  1. 16 3
      package/mac80211/patches/560-mac80211_defer_bar_tx.patch

+ 16 - 3
package/mac80211/patches/560-mac80211_defer_bar_tx.patch

@@ -73,13 +73,26 @@
  /*
   * Use a static threshold for now, best value to be determined
   * by testing ...
-@@ -254,10 +286,13 @@ void ieee80211_tx_status(struct ieee8021
+@@ -246,6 +278,8 @@ void ieee80211_tx_status(struct ieee8021
+ 		}
+ 
+ 		if (!acked && ieee80211_is_back_req(fc)) {
++			u16 control;
++
+ 			/*
+ 			 * BAR failed, let's tear down the BA session as a
+ 			 * last resort as some STAs (Intel 5100 on Windows)
+@@ -253,11 +287,15 @@ void ieee80211_tx_status(struct ieee8021
+ 			 * correctly.
  			 */
  			bar = (struct ieee80211_bar *) skb->data;
- 			if (!(bar->control & IEEE80211_BAR_CTRL_MULTI_TID)) {
+-			if (!(bar->control & IEEE80211_BAR_CTRL_MULTI_TID)) {
+-				tid = (bar->control &
++			control = le16_to_cpu(bar->control);
++			if (!(control & IEEE80211_BAR_CTRL_MULTI_TID)) {
 +				u16 ssn = le16_to_cpu(bar->start_seq_num);
 +
- 				tid = (bar->control &
++				tid = (control &
  				       IEEE80211_BAR_CTRL_TID_INFO_MASK) >>
  				      IEEE80211_BAR_CTRL_TID_INFO_SHIFT;
 -				ieee80211_stop_tx_ba_session(&sta->sta, tid);