ar9170usb: fix panic triggered by undersized rxstream buffer
authorChristian Lamparter <chunkeey@googlemail.com>
Tue, 23 Mar 2010 20:51:14 +0000 (21:51 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 31 Mar 2010 18:50:51 +0000 (14:50 -0400)
While ar9170's USB transport packet size is currently set to 8KiB,
the PHY is capable of receiving AMPDUs with up to 64KiB.
Such a large frame will be split over several rx URBs and
exceed the previously allocated space for rx stream reconstruction.

This patch increases the buffer size to 64KiB which is
in fact the phy & rx stream designed size limit.

Cc: stable@kernel.org
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=15591
Reported-by: Christian Mehlis <mehlis@inf.fu-berlin.de>
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ar9170/hw.h
drivers/net/wireless/ath/ar9170/main.c

index 0a1d4c28e68a346e05a82c15c0599824bb5a4678..06f1f3c951a4daa136efbefcc3891e5b35b844a7 100644 (file)
@@ -425,5 +425,6 @@ enum ar9170_txq {
 
 #define AR9170_TXQ_DEPTH       32
 #define AR9170_TX_MAX_PENDING  128
+#define AR9170_RX_STREAM_MAX_SIZE 65535
 
 #endif /* __AR9170_HW_H */
index f4650fcdebc98b2b3917b257226d30720be9bf1d..2daeaa5bcb88453be78758b2aab23ac9b3c21cec 100644 (file)
@@ -2515,7 +2515,7 @@ void *ar9170_alloc(size_t priv_size)
         * tends to split the streams into seperate rx descriptors.
         */
 
-       skb = __dev_alloc_skb(AR9170_MAX_RX_BUFFER_SIZE, GFP_KERNEL);
+       skb = __dev_alloc_skb(AR9170_RX_STREAM_MAX_SIZE, GFP_KERNEL);
        if (!skb)
                goto err_nomem;