]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mtd: rawnand: cadence: fix DMA device NULL pointer dereference
authorNiravkumar L Rabara <niravkumarlaxmidas.rabara@altera.com>
Thu, 23 Oct 2025 03:32:01 +0000 (11:32 +0800)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 23 Oct 2025 07:03:13 +0000 (09:03 +0200)
The DMA device pointer `dma_dev` was being dereferenced before ensuring
that `cdns_ctrl->dmac` is properly initialized.

Move the assignment of `dma_dev` after successfully acquiring the DMA
channel to ensure the pointer is valid before use.

Fixes: d76d22b5096c ("mtd: rawnand: cadence: use dma_map_resource for sdma address")
Cc: stable@vger.kernel.org
Signed-off-by: Niravkumar L Rabara <niravkumarlaxmidas.rabara@altera.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/raw/cadence-nand-controller.c

index 6667eea9559773237f9ddf57b5d4d0ea86e5469e..32ed38b893947816d3ad05b55f89d6e360217ce2 100644 (file)
@@ -2871,7 +2871,7 @@ cadence_nand_irq_cleanup(int irqnum, struct cdns_nand_ctrl *cdns_ctrl)
 static int cadence_nand_init(struct cdns_nand_ctrl *cdns_ctrl)
 {
        dma_cap_mask_t mask;
-       struct dma_device *dma_dev = cdns_ctrl->dmac->device;
+       struct dma_device *dma_dev;
        int ret;
 
        cdns_ctrl->cdma_desc = dma_alloc_coherent(cdns_ctrl->dev,
@@ -2915,6 +2915,7 @@ static int cadence_nand_init(struct cdns_nand_ctrl *cdns_ctrl)
                }
        }
 
+       dma_dev = cdns_ctrl->dmac->device;
        cdns_ctrl->io.iova_dma = dma_map_resource(dma_dev->dev, cdns_ctrl->io.dma,
                                                  cdns_ctrl->io.size,
                                                  DMA_BIDIRECTIONAL, 0);