mirror of
https://github.com/LineageOS/android_kernel_fxtec_sm6115.git
synced 2026-08-18 12:11:02 +00:00
parisc: Fix IRQ leak in LASI driver
commit 37b0dc5e279f35036fb638d1e187197b6c05a76d upstream. When request_irq() succeeds but gsc_common_setup() fails later, the IRQ is never released. Fix this by adding proper error handling with goto labels to ensure resources are released in LIFO order. Detected by Smatch: drivers/parisc/lasi.c:216 lasi_init_chip() warn: 'lasi->gsc_irq.irq' from request_irq() not released on lines: 207. Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <error27@gmail.com> Closes: https://lore.kernel.org/r/202604180957.4QdAIxP6-lkp@intel.com/ Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn> Cc: stable@vger.kernel.org Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Ulrich Hecht <uli@kernel.org>
This commit is contained in:
committed by
Ulrich Hecht
parent
01ed2c82fa
commit
6a8585e238
@ -200,8 +200,7 @@ static int __init lasi_init_chip(struct parisc_device *dev)
|
||||
|
||||
ret = request_irq(lasi->gsc_irq.irq, gsc_asic_intr, 0, "lasi", lasi);
|
||||
if (ret < 0) {
|
||||
kfree(lasi);
|
||||
return ret;
|
||||
goto err_free;
|
||||
}
|
||||
|
||||
/* enable IRQ's for devices below LASI */
|
||||
@ -210,8 +209,7 @@ static int __init lasi_init_chip(struct parisc_device *dev)
|
||||
/* Done init'ing, register this driver */
|
||||
ret = gsc_common_setup(dev, lasi);
|
||||
if (ret) {
|
||||
kfree(lasi);
|
||||
return ret;
|
||||
goto err_irq;
|
||||
}
|
||||
|
||||
gsc_fixup_irqs(dev, lasi, lasi_choose_irq);
|
||||
@ -224,6 +222,12 @@ static int __init lasi_init_chip(struct parisc_device *dev)
|
||||
chassis_power_off = lasi_power_off;
|
||||
|
||||
return ret;
|
||||
|
||||
err_irq:
|
||||
free_irq(lasi->gsc_irq.irq, lasi);
|
||||
err_free:
|
||||
kfree(lasi);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct parisc_device_id lasi_tbl[] __initdata = {
|
||||
|
||||
Reference in New Issue
Block a user