[PATCH 2/2] ASoC: atmel: ac97c: Fix use-after-free on driver teardown
Manish Baing <[email protected]>
| Newsgroups | org.kernel.vger.linux-sound,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
In atmel_ac97c_remove() and the probe error path, the driver disables clocks and unmaps memory before freeing the IRQ. If a stray interrupt fires during this window, the handler will attempt to access unmapped memory or unclocked hardware, resulting in a kernel panic. Reorder the teardown sequence to call free_irq() first, adhering to the standard reverse-initialization order. Running make W=1 returns no errors. I was unable to test the patch because I do not have the hardware. The issue was flagged by the Sashiko AI bot. Link: https://sashiko.dev/#/patchset/[email protected]?part=1 Reported-by: Sashiko AI <[email protected]> Signed-off-by: Manish Baing <[email protected]> --- sound/atmel/ac97c.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sound/atmel/ac97c.c b/sound/atmel/ac97c.c index 205475157e72..24a27e67f15f 100644 --- a/sound/atmel/ac97c.c +++ b/sound/atmel/ac97c.c @@ -789,7 +789,7 @@ static int atmel_ac97c_probe(struct platform_device *pdev) retval = snd_card_register(card); if (retval) { dev_dbg(&pdev->dev, "could not register sound card\n"); - goto err_ac97_bus; + goto err_snd_card_register; } platform_set_drvdata(pdev, card); @@ -799,11 +799,12 @@ static int atmel_ac97c_probe(struct platform_device *pdev) return 0; +err_snd_card_register: + free_irq(irq, chip); err_ac97_bus: +err_request_irq: iounmap(chip->regs); err_ioremap: - free_irq(irq, chip); -err_request_irq: snd_card_free(card); err_snd_card_new: clk_disable_unprepare(pclk); @@ -841,10 +842,10 @@ static void atmel_ac97c_remove(struct platform_device *pdev) ac97c_writel(chip, COMR, 0); ac97c_writel(chip, MR, 0); + free_irq(chip->irq, chip); clk_disable_unprepare(chip->pclk); clk_put(chip->pclk); iounmap(chip->regs); - free_irq(chip->irq, chip); snd_card_free(card); } -- 2.43.0