mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
drivers: atm: eni: Add pci_dma_mapping_error() call
Added a pci_dma_mapping_error() call to check for mapping errors before further using the dma handle. In case of error, control goes to a new label where the incoming skb is freed. Unchecked dma handles were found using Coccinelle: @rule1@ expression e1; identifier x; @@ *x = pci_map_single(...); ... when != pci_dma_mapping_error(e1,x) Signed-off-by: Tina Johnson <tinajohnson.1234@gmail.com> Acked-by: Julia Lawall <julia.lawall@lip6.fr> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
49ed2617a0
commit
541675580f
@ -356,6 +356,8 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb,
|
|||||||
if (skb) {
|
if (skb) {
|
||||||
paddr = pci_map_single(eni_dev->pci_dev,skb->data,skb->len,
|
paddr = pci_map_single(eni_dev->pci_dev,skb->data,skb->len,
|
||||||
PCI_DMA_FROMDEVICE);
|
PCI_DMA_FROMDEVICE);
|
||||||
|
if (pci_dma_mapping_error(eni_dev->pci_dev, paddr))
|
||||||
|
goto dma_map_error;
|
||||||
ENI_PRV_PADDR(skb) = paddr;
|
ENI_PRV_PADDR(skb) = paddr;
|
||||||
if (paddr & 3)
|
if (paddr & 3)
|
||||||
printk(KERN_CRIT DEV_LABEL "(itf %d): VCI %d has "
|
printk(KERN_CRIT DEV_LABEL "(itf %d): VCI %d has "
|
||||||
@ -481,6 +483,7 @@ trouble:
|
|||||||
if (paddr)
|
if (paddr)
|
||||||
pci_unmap_single(eni_dev->pci_dev,paddr,skb->len,
|
pci_unmap_single(eni_dev->pci_dev,paddr,skb->len,
|
||||||
PCI_DMA_FROMDEVICE);
|
PCI_DMA_FROMDEVICE);
|
||||||
|
dma_map_error:
|
||||||
if (skb) dev_kfree_skb_irq(skb);
|
if (skb) dev_kfree_skb_irq(skb);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user