mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
watchdog: sp5100_tco: Fix pci_dev reference leak in sp5100_tco_init()
sp5100_tco_init() stores the PCI device matched by for_each_pci_dev()
in the global sp5100_tco_pci and keeps its reference for the lifetime
of the driver, but neither sp5100_tco_exit() nor the error paths of
sp5100_tco_init() call pci_dev_put(), leaking the reference on driver
registration failure and on every module load/unload cycle.
Drop the reference when the platform driver or device registration
fails and when the module is unloaded.
Fixes: 15e28bf130 ("watchdog: Add support for sp5100 chipset TCO")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Link: https://patch.msgid.link/20260916170511.2086199-1-vulab@iscas.ac.cn
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
fd73f4a665
commit
88f1136340
|
|
@ -605,8 +605,10 @@ static int __init sp5100_tco_init(void)
|
|||
pr_info("SP5100/SB800 TCO WatchDog Timer Driver\n");
|
||||
|
||||
err = platform_driver_register(&sp5100_tco_driver);
|
||||
if (err)
|
||||
if (err) {
|
||||
pci_dev_put(sp5100_tco_pci);
|
||||
return err;
|
||||
}
|
||||
|
||||
sp5100_tco_platform_device =
|
||||
platform_device_register_simple(TCO_DRIVER_NAME, -1, NULL, 0);
|
||||
|
|
@ -619,6 +621,7 @@ static int __init sp5100_tco_init(void)
|
|||
|
||||
unreg_platform_driver:
|
||||
platform_driver_unregister(&sp5100_tco_driver);
|
||||
pci_dev_put(sp5100_tco_pci);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -626,6 +629,7 @@ static void __exit sp5100_tco_exit(void)
|
|||
{
|
||||
platform_device_unregister(sp5100_tco_platform_device);
|
||||
platform_driver_unregister(&sp5100_tco_driver);
|
||||
pci_dev_put(sp5100_tco_pci);
|
||||
}
|
||||
|
||||
module_init(sp5100_tco_init);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user