bnxt_en: Fix crash in bnxt_free_tx_skbs() during tx timeout.
The ring index j is not wrapped properly at the end of the ring, causing it to reference pointers past the end of the ring. For proper loop termination and to access the ring properly, we need to increment j and mask it before referencing the ring entry. Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
8a4d4c8dde
Коммит
d612a57977
|
@ -1490,10 +1490,11 @@ static void bnxt_free_tx_skbs(struct bnxt *bp)
|
|||
|
||||
last = tx_buf->nr_frags;
|
||||
j += 2;
|
||||
for (k = 0; k < last; k++, j = NEXT_TX(j)) {
|
||||
for (k = 0; k < last; k++, j++) {
|
||||
int ring_idx = j & bp->tx_ring_mask;
|
||||
skb_frag_t *frag = &skb_shinfo(skb)->frags[k];
|
||||
|
||||
tx_buf = &txr->tx_buf_ring[j];
|
||||
tx_buf = &txr->tx_buf_ring[ring_idx];
|
||||
dma_unmap_page(
|
||||
&pdev->dev,
|
||||
dma_unmap_addr(tx_buf, mapping),
|
||||
|
|
Загрузка…
Ссылка в новой задаче