Commit f7b7caa4 authored by Alexey Khoroshilov's avatar Alexey Khoroshilov Committed by Kalle Valo

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: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent ee548d4b
...@@ -2311,8 +2311,10 @@ static int ipw2100_alloc_skb(struct ipw2100_priv *priv, ...@@ -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) ...@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment