rtw88: fix potential NULL skb access in TX ISR
authorYan-Hsuan Chuang <yhchuang@realtek.com>
Tue, 7 Jan 2020 08:08:07 +0000 (16:08 +0800)
committerKalle Valo <kvalo@codeaurora.org>
Sun, 26 Jan 2020 15:42:31 +0000 (17:42 +0200)
Sometimes the TX queue may be empty and we could possible
dequeue a NULL pointer, crash the kernel. If the skb is NULL
then there is nothing to do, just leave the ISR.

And the TX queue should not be empty here, so print an error
to see if there is anything wrong for DMA ring.

Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver")
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/realtek/rtw88/pci.c

index f7770304ba42ad0126f4f3c21bda92d335ba6b6f..1fbc14c149ec9ab67bd24e2e6b624713c4959d5e 100644 (file)
@@ -835,6 +835,11 @@ static void rtw_pci_tx_isr(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
 
        while (count--) {
                skb = skb_dequeue(&ring->queue);
+               if (!skb) {
+                       rtw_err(rtwdev, "failed to dequeue %d skb TX queue %d, BD=0x%08x, rp %d -> %d\n",
+                               count, hw_queue, bd_idx, ring->r.rp, cur_rp);
+                       break;
+               }
                tx_data = rtw_pci_get_tx_data(skb);
                pci_unmap_single(rtwpci->pdev, tx_data->dma, skb->len,
                                 PCI_DMA_TODEVICE);