mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
dmaengine: plx_dma: fix NULL pointer deref in plx_dma_isr()
plx_dma_create() registered the interrupt handler with request_irq()
before initializing plxdev->bar. If the device raised an interrupt in
that window, plx_dma_isr() would dereference the still-NULL bar.
Move the bar assignment ahead of request_irq() so everything the
handler can touch is initialized before it can run.
Reported-by: Sangyun Kim <sangyun.kim@snu.ac.kr>
Reported-by: Kyungwook Boo <bookyungwook@gmail.com>
Link: https://lore.kernel.org/all/20260610112121.676561-1-jjy600901@snu.ac.kr
Fixes: c2dbcaa8c6 ("dmaengine: plx-dma: Implement hardware initialization and cleanup")
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Link: https://lore.kernel.org/all/20260610112121.676561-1-jjy600901@snu.ac.kr/T/#u
Link: https://patch.msgid.link/20260902062153.31048-11-logang@deltatee.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
c691357acf
commit
f301789245
|
|
@ -504,17 +504,17 @@ static int plx_dma_create(struct pci_dev *pdev)
|
|||
if (!plxdev)
|
||||
return -ENOMEM;
|
||||
|
||||
rc = request_irq(pci_irq_vector(pdev, 0), plx_dma_isr, 0,
|
||||
KBUILD_MODNAME, plxdev);
|
||||
if (rc)
|
||||
goto free_plx;
|
||||
|
||||
spin_lock_init(&plxdev->ring_lock);
|
||||
tasklet_setup(&plxdev->desc_task, plx_dma_desc_task);
|
||||
|
||||
RCU_INIT_POINTER(plxdev->pdev, pdev);
|
||||
plxdev->bar = pcim_iomap_table(pdev)[0];
|
||||
|
||||
rc = request_irq(pci_irq_vector(pdev, 0), plx_dma_isr, 0,
|
||||
KBUILD_MODNAME, plxdev);
|
||||
if (rc)
|
||||
goto free_plx;
|
||||
|
||||
dma = &plxdev->dma_dev;
|
||||
INIT_LIST_HEAD(&dma->channels);
|
||||
dma_cap_set(DMA_MEMCPY, dma->cap_mask);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user