Skip to content

Commit 426e584

Browse files
auyerBenjamin Tissoires
authored andcommitted
HID: Input: Add battery list cleanup with devm action
The batteries list (hdev->batteries) is not cleaned up during hidinput_disconnect(), but struct hid_battery entries are allocated with devm_kzalloc. When a driver is unbound (e.g. during devicereprobe), devm frees those entries while their list_head nodesremain dangling in hdev->batteries, which persists across rebinds. Link: https://lore.kernel.org/all/20260602011949.2825852-1-rafael@rcpassos.me/ Fixes: 4a58ae8 ("HID: input: Add support for multiple batteries per device") Signed-off-by: Rafael Passos <rafael@rcpassos.me> Acked-by: Lucas Zampieri <lcasmz54@gmail.com> Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
1 parent c0a8899 commit 426e584

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

drivers/hid/hid-input.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,13 @@ static struct hid_battery *hidinput_find_battery(struct hid_device *dev,
519519
return NULL;
520520
}
521521

522+
static void hidinput_cleanup_battery(void *res)
523+
{
524+
struct hid_battery *bat = res;
525+
526+
list_del(&bat->list);
527+
}
528+
522529
static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
523530
struct hid_field *field, bool is_percentage)
524531
{
@@ -610,6 +617,12 @@ static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
610617

611618
power_supply_powers(bat->ps, &dev->dev);
612619
list_add_tail(&bat->list, &dev->batteries);
620+
621+
error = devm_add_action_or_reset(&dev->dev,
622+
hidinput_cleanup_battery, bat);
623+
if (error)
624+
return error;
625+
613626
return 0;
614627

615628
err_free_name:

0 commit comments

Comments
 (0)