b43: allocate receive buffers big enough for max frame len + offset
Otherwise, skb_put inside of dma_rx can fail... https://bugzilla.kernel.org/show_bug.cgi?id=32042 Signed-off-by: John W. Linville <linville@tuxdriver.com> Acked-by: Larry Finger <Larry.Finger@lwfinger.net> Cc: stable@kernel.org
This commit is contained in:
@@ -1536,7 +1536,7 @@ static void dma_rx(struct b43_dmaring *ring, int *slot)
|
|||||||
dmaaddr = meta->dmaaddr;
|
dmaaddr = meta->dmaaddr;
|
||||||
goto drop_recycle_buffer;
|
goto drop_recycle_buffer;
|
||||||
}
|
}
|
||||||
if (unlikely(len > ring->rx_buffersize)) {
|
if (unlikely(len + ring->frameoffset > ring->rx_buffersize)) {
|
||||||
/* The data did not fit into one descriptor buffer
|
/* The data did not fit into one descriptor buffer
|
||||||
* and is split over multiple buffers.
|
* and is split over multiple buffers.
|
||||||
* This should never happen, as we try to allocate buffers
|
* This should never happen, as we try to allocate buffers
|
||||||
|
@@ -163,7 +163,7 @@ struct b43_dmadesc_generic {
|
|||||||
/* DMA engine tuning knobs */
|
/* DMA engine tuning knobs */
|
||||||
#define B43_TXRING_SLOTS 256
|
#define B43_TXRING_SLOTS 256
|
||||||
#define B43_RXRING_SLOTS 64
|
#define B43_RXRING_SLOTS 64
|
||||||
#define B43_DMA0_RX_BUFFERSIZE IEEE80211_MAX_FRAME_LEN
|
#define B43_DMA0_RX_BUFFERSIZE (B43_DMA0_RX_FRAMEOFFSET + IEEE80211_MAX_FRAME_LEN)
|
||||||
|
|
||||||
/* Pointer poison */
|
/* Pointer poison */
|
||||||
#define B43_DMA_PTR_POISON ((void *)ERR_PTR(-ENOMEM))
|
#define B43_DMA_PTR_POISON ((void *)ERR_PTR(-ENOMEM))
|
||||||
|
Reference in New Issue
Block a user