Commit 83483ad0 authored by Alexey Khoroshilov's avatar Alexey Khoroshilov Committed by Kleber Sacilotto de Souza

irda: vlsi_ir: fix check for DMA mapping errors

BugLink: http://bugs.launchpad.net/bugs/1745054

[ Upstream commit 6ac3b77a ]

vlsi_alloc_ring() checks for DMA mapping errors by comparing
returned address with zero, while pci_dma_mapping_error() should be used.

Found by Linux Driver Verification project (linuxtesting.org).
Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
parent 891e7f5e
...@@ -418,8 +418,9 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr ...@@ -418,8 +418,9 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr
memset(rd, 0, sizeof(*rd)); memset(rd, 0, sizeof(*rd));
rd->hw = hwmap + i; rd->hw = hwmap + i;
rd->buf = kmalloc(len, GFP_KERNEL|GFP_DMA); rd->buf = kmalloc(len, GFP_KERNEL|GFP_DMA);
if (rd->buf == NULL || if (rd->buf)
!(busaddr = pci_map_single(pdev, rd->buf, len, dir))) { busaddr = pci_map_single(pdev, rd->buf, len, dir);
if (rd->buf == NULL || pci_dma_mapping_error(pdev, busaddr)) {
if (rd->buf) { if (rd->buf) {
net_err_ratelimited("%s: failed to create PCI-MAP for %p\n", net_err_ratelimited("%s: failed to create PCI-MAP for %p\n",
__func__, rd->buf); __func__, rd->buf);
...@@ -430,7 +431,6 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr ...@@ -430,7 +431,6 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr
rd = r->rd + j; rd = r->rd + j;
busaddr = rd_get_addr(rd); busaddr = rd_get_addr(rd);
rd_set_addr_status(rd, 0, 0); rd_set_addr_status(rd, 0, 0);
if (busaddr)
pci_unmap_single(pdev, busaddr, len, dir); pci_unmap_single(pdev, busaddr, len, dir);
kfree(rd->buf); kfree(rd->buf);
rd->buf = NULL; rd->buf = NULL;
......
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