aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/mac80211/tx.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index a23a84e93e80..7e7de811e6ad 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1420,6 +1420,7 @@ bool ieee80211_tx_prepare_skb(struct ieee80211_hw *hw,
1420 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 1420 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
1421 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 1421 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1422 struct ieee80211_tx_data tx; 1422 struct ieee80211_tx_data tx;
1423 struct sk_buff *skb2;
1423 1424
1424 if (ieee80211_tx_prepare(sdata, &tx, skb) == TX_DROP) 1425 if (ieee80211_tx_prepare(sdata, &tx, skb) == TX_DROP)
1425 return false; 1426 return false;
@@ -1438,6 +1439,14 @@ bool ieee80211_tx_prepare_skb(struct ieee80211_hw *hw,
1438 *sta = NULL; 1439 *sta = NULL;
1439 } 1440 }
1440 1441
1442 /* this function isn't suitable for fragmented data frames */
1443 skb2 = __skb_dequeue(&tx.skbs);
1444 if (WARN_ON(skb2 != skb || !skb_queue_empty(&tx.skbs))) {
1445 ieee80211_free_txskb(hw, skb2);
1446 ieee80211_purge_tx_queue(hw, &tx.skbs);
1447 return false;
1448 }
1449
1441 return true; 1450 return true;
1442} 1451}
1443EXPORT_SYMBOL(ieee80211_tx_prepare_skb); 1452EXPORT_SYMBOL(ieee80211_tx_prepare_skb);