ath9k: Fix sequence number assignment for non-data frames
PATCH 1/1 ath9k: Fix sequence number assignment for non-data frames
Since commit 558ff225de80ac95b132d3a115ddadcd64498b4f (ath9k: fix ps-poll responses under a-mpdu sessions) non-data frames would have gotten a sequence number from a TIDs sequence counter instead of using the global sequence counter.
This can lead to instable connections.
To fix this only select the correct TID if we are processing a data frame. Furthermore, prevent non-data frames to get a sequence number from a TID sequence counter by adding a check to ath_tx_setup_buffer.
--- drivers/net/wireless/ath/ath9k/xmit.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/ath/ath9k/xmit.c +2 -2
@@ -2064,7 +2064,7 @@ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,ATH_TXBUF_RESET (bf); -if (tid) { +if (tid &&ieee80211_is_data_present (hdr->frame_control)) { fragno =le16_to_cpu (hdr->seq_ctrl) &IEEE80211_SCTL_FRAG ; seqno = tid->seq_next; hdr->seq_ctrl =cpu_to_le16 (tid->seq_next <<IEEE80211_SEQ_SEQ_SHIFT );
@@ -2187,7 +2187,7 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, txq->stopped = true; } -if (txctl->an) +if (txctl->an &&ieee80211_is_data_present (hdr->frame_control)) tid =ath_get_skb_tid (sc, txctl->an, skb);if (info->flags &IEEE80211_TX_CTL_PS_RESPONSE ) {
Signature · 1 line
1.8.1.4
Quoted 7 lines · Helmut Schaa
Since commit
558ff225de80ac95b132d3a115ddadcd64498b4f(ath9k: fix ps-poll responses under a-mpdu sessions) non-data frames would have gotten a sequence number from a TIDs sequence counter instead of using the global sequence counter.This can lead to instable connections.
Quoted 7 lines
To fix this only select the correct TID if we are processing a data frame. Furthermore, prevent non-data frames to get a sequence number from a TID sequence counter by adding a check to
ath_tx_setup_buffer.Cc Felix Fietkau <[email protected]>Signed-off-by Helmut Schaa <[email protected]>