This is a note to let you know that I've just added the patch titled

    staging: brcm80211: bugfix for div by zero in minstrel_ht_tx_status

to my staging git tree which can be found at
    git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6.git
in the staging-next branch.

The patch will show up in the next release of the linux-next tree
(usually sometime within the next 24 hours during the week.)

The patch will also will be merged in the next major kernel release
during the merge window.

If you have any questions about this process, please let me know.


>From e9c661e08c2a6015c1b7cba1cecefa27a089df71 Mon Sep 17 00:00:00 2001
From: Roland Vossen <[email protected]>
Date: Tue, 12 Apr 2011 14:34:41 +0200
Subject: staging: brcm80211: bugfix for div by zero in minstrel_ht_tx_status

Caused by brcmsmac.ko suppling a 0 value to Mac80211. Mac80211 subsequently
divides by this number. Bug only occurred on AMPDU traffic. This is a fix
for https://bugzilla.kernel.org/show_bug.cgi?id=32032, titled
'Divide error in minstrel_ht_tx_status followed by hang', reported by
Wouter Cloetens.

Signed-off-by: Roland Vossen <[email protected]>
Reviewed-by: Arend van Spriel <[email protected]>
Cc: stable <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c |   13 +++----------
 1 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c 
b/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c
index 9803449..07fbc3d 100644
--- a/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c
+++ b/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c
@@ -1122,21 +1122,12 @@ wlc_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, 
struct scb *scb,
                                ini->txretry[index] = 0;
 
                                /* ampdu_ack_len: number of acked aggregated 
frames */
-                               /* ampdu_ack_map: block ack bit map for the 
aggregation */
                                /* ampdu_len: number of aggregated frames */
                                rate_status(wlc, tx_info, txs, mcs);
                                tx_info->flags |= IEEE80211_TX_STAT_ACK;
                                tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
-
-                               /* XXX TODO: Make these accurate. */
                                tx_info->status.ampdu_ack_len =
-                                   (txs->
-                                    status & TX_STATUS_FRM_RTX_MASK) >>
-                                   TX_STATUS_FRM_RTX_SHIFT;
-                               tx_info->status.ampdu_len =
-                                   (txs->
-                                    status & TX_STATUS_FRM_RTX_MASK) >>
-                                   TX_STATUS_FRM_RTX_SHIFT;
+                                       tx_info->status.ampdu_len = 1;
 
                                skb_pull(p, D11_PHY_HDR_LEN);
                                skb_pull(p, D11_TXH_LEN);
@@ -1162,6 +1153,8 @@ wlc_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, 
struct scb *scb,
                                /* Retry timeout */
                                ini->tx_in_transit--;
                                ieee80211_tx_info_clear_status(tx_info);
+                               tx_info->status.ampdu_ack_len = 0;
+                               tx_info->status.ampdu_len = 1;
                                tx_info->flags |=
                                    IEEE80211_TX_STAT_AMPDU_NO_BACK;
                                skb_pull(p, D11_PHY_HDR_LEN);
-- 
1.7.4.2


_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to