mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 20:53:03 +02:00
hwmon: (applesmc) fix key backlight workqueue leak on register failure
applesmc_create_key_backlight() allocates applesmc_led_wq before calling
led_classdev_register(). When register fails, the error is returned to
applesmc_init(), which jumps to out_light_sysfs and skips
applesmc_release_key_backlight(), leaking the workqueue.
Destroy the workqueue on the register failure path. The bug was introduced
when the inline init block was refactored into a helper that returns errors
directly, dropping the old out_light_wq unwind label.
Fixes: 0b0b5dff89 ("hwmon: (applesmc) Simplify feature sysfs handling")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-4
Signed-off-by: Cong Nguyen <congnt264@gmail.com>
Link: https://patch.msgid.link/20260828105413.2401385-1-congnt264@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
70c33e211b
commit
5a0aacaa2d
|
|
@ -1128,12 +1128,17 @@ static void applesmc_release_light_sensor(void)
|
|||
|
||||
static int applesmc_create_key_backlight(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!smcreg.has_key_backlight)
|
||||
return 0;
|
||||
applesmc_led_wq = create_singlethread_workqueue("applesmc-led");
|
||||
if (!applesmc_led_wq)
|
||||
return -ENOMEM;
|
||||
return led_classdev_register(&pdev->dev, &applesmc_backlight);
|
||||
ret = led_classdev_register(&pdev->dev, &applesmc_backlight);
|
||||
if (ret)
|
||||
destroy_workqueue(applesmc_led_wq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void applesmc_release_key_backlight(void)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user