mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +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) {
|
||||
paddr = pci_map_single(eni_dev->pci_dev,skb->data,skb->len,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
if (pci_dma_mapping_error(eni_dev->pci_dev, paddr))
|
||||
goto dma_map_error;
|
||||
ENI_PRV_PADDR(skb) = paddr;
|
||||
if (paddr & 3)
|
||||
printk(KERN_CRIT DEV_LABEL "(itf %d): VCI %d has "
|
||||
@ -481,6 +483,7 @@ trouble:
|
||||
if (paddr)
|
||||
pci_unmap_single(eni_dev->pci_dev,paddr,skb->len,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
dma_map_error:
|
||||
if (skb) dev_kfree_skb_irq(skb);
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user