ipw2x00: add checks for dma mapping errors

ipw2100_alloc_skb() and ipw2100_tx_send_data() do not check if mapping
dma memory succeed. The patch adds the checks and failure handling.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
Alexey Khoroshilov 2016-01-02 02:12:38 +03:00 committed by Kalle Valo
parent ee548d4b10
commit f7b7caa488
1 changed files with 9 additions and 2 deletions

View File

@ -2311,8 +2311,10 @@ static int ipw2100_alloc_skb(struct ipw2100_priv *priv,
packet->dma_addr = pci_map_single(priv->pci_dev, packet->skb->data, packet->dma_addr = pci_map_single(priv->pci_dev, packet->skb->data,
sizeof(struct ipw2100_rx), sizeof(struct ipw2100_rx),
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
/* NOTE: pci_map_single does not return an error code, and 0 is a valid if (pci_dma_mapping_error(priv->pci_dev, packet->dma_addr)) {
* dma_addr */ dev_kfree_skb(packet->skb);
return -ENOMEM;
}
return 0; return 0;
} }
@ -3183,6 +3185,11 @@ static void ipw2100_tx_send_data(struct ipw2100_priv *priv)
LIBIPW_3ADDR_LEN, LIBIPW_3ADDR_LEN,
tbd->buf_length, tbd->buf_length,
PCI_DMA_TODEVICE); PCI_DMA_TODEVICE);
if (pci_dma_mapping_error(priv->pci_dev,
tbd->host_addr)) {
IPW_DEBUG_TX("dma mapping error\n");
break;
}
IPW_DEBUG_TX("data frag tbd TX%d P=%08x L=%d\n", IPW_DEBUG_TX("data frag tbd TX%d P=%08x L=%d\n",
txq->next, tbd->host_addr, txq->next, tbd->host_addr,