HID: appletb-kbd: fix "appletb_backlight" backlight device reference counting
authorQasim Ijaz <qasdev00@gmail.com>
Sun, 15 Jun 2025 22:59:41 +0000 (23:59 +0100)
committerJiri Kosina <jkosina@suse.com>
Fri, 20 Jun 2025 07:01:27 +0000 (09:01 +0200)
During appletb_kbd_probe, probe attempts to get the backlight device
by name. When this happens backlight_device_get_by_name looks for a
device in the backlight class which has name "appletb_backlight" and
upon finding a match it increments the reference count for the device
and returns it to the caller. However this reference is never released
leading to a reference leak.

Fix this by decrementing the backlight device reference count on removal
via put_device and on probe failure.

Fixes: 93a0fc489481 ("HID: hid-appletb-kbd: add support for automatic brightness control while using the touchbar")
Cc: stable@vger.kernel.org
Signed-off-by: Qasim Ijaz <qasdev00@gmail.com>
Reviewed-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-appletb-kbd.c

index ef51b2c06872d04329f1b2208a7aaaca19a73888..e06567886e50183026693bc2729aa3fe71f1a879 100644 (file)
@@ -438,6 +438,8 @@ static int appletb_kbd_probe(struct hid_device *hdev, const struct hid_device_id
        return 0;
 
 close_hw:
+       if (kbd->backlight_dev)
+               put_device(&kbd->backlight_dev->dev);
        hid_hw_close(hdev);
 stop_hw:
        hid_hw_stop(hdev);
@@ -453,6 +455,9 @@ static void appletb_kbd_remove(struct hid_device *hdev)
        input_unregister_handler(&kbd->inp_handler);
        timer_delete_sync(&kbd->inactivity_timer);
 
+       if (kbd->backlight_dev)
+               put_device(&kbd->backlight_dev->dev);
+
        hid_hw_close(hdev);
        hid_hw_stop(hdev);
 }