]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
dmaengine: nbpfaxi: Add missing check after DMA map
authorThomas Fourier <fourier.thomas@gmail.com>
Mon, 7 Jul 2025 07:57:16 +0000 (09:57 +0200)
committerVinod Koul <vkoul@kernel.org>
Wed, 23 Jul 2025 12:25:32 +0000 (17:55 +0530)
The DMA map functions can fail and should be tested for errors.
If the mapping fails, unmap and return an error.

Fixes: b45b262cefd5 ("dmaengine: add a driver for AMBA AXI NBPF DMAC IP cores")
Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
Link: https://lore.kernel.org/r/20250707075752.28674-2-fourier.thomas@gmail.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/nbpfaxi.c

index 0d6324c4e2be0b8d132b6074a2b1cc64cea5a34f..0b75bb122898e22cdcb3db50adcc34788ca15133 100644 (file)
@@ -711,6 +711,9 @@ static int nbpf_desc_page_alloc(struct nbpf_channel *chan)
                list_add_tail(&ldesc->node, &lhead);
                ldesc->hwdesc_dma_addr = dma_map_single(dchan->device->dev,
                                        hwdesc, sizeof(*hwdesc), DMA_TO_DEVICE);
+               if (dma_mapping_error(dchan->device->dev,
+                                     ldesc->hwdesc_dma_addr))
+                       goto unmap_error;
 
                dev_dbg(dev, "%s(): mapped 0x%p to %pad\n", __func__,
                        hwdesc, &ldesc->hwdesc_dma_addr);
@@ -737,6 +740,16 @@ static int nbpf_desc_page_alloc(struct nbpf_channel *chan)
        spin_unlock_irq(&chan->lock);
 
        return ARRAY_SIZE(dpage->desc);
+
+unmap_error:
+       while (i--) {
+               ldesc--; hwdesc--;
+
+               dma_unmap_single(dchan->device->dev, ldesc->hwdesc_dma_addr,
+                                sizeof(hwdesc), DMA_TO_DEVICE);
+       }
+
+       return -ENOMEM;
 }
 
 static void nbpf_desc_put(struct nbpf_desc *desc)