mirror of https://gitee.com/openkylin/linux.git
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:
parent
ee548d4b10
commit
f7b7caa488
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue