Skip to content

Commit

Permalink
ACPI / scan: Fix acpi_bus_id_list bookkeeping
Browse files Browse the repository at this point in the history
acpi_device_add() allocates and adds an element to acpi_bus_id_list
(or increments the instance count if the device's HID is already
present in the list), but the element is never deleted from the list
nor freed. Fix it.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Lukas Wunner authored and Rafael J. Wysocki committed Dec 9, 2015
1 parent e399037 commit ca9dc8d
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions drivers/acpi/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -471,10 +471,24 @@ static void acpi_device_release(struct device *dev)

static void acpi_device_del(struct acpi_device *device)
{
struct acpi_device_bus_id *acpi_device_bus_id;

mutex_lock(&acpi_device_lock);
if (device->parent)
list_del(&device->node);

list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node)
if (!strcmp(acpi_device_bus_id->bus_id,
acpi_device_hid(device))) {
if (acpi_device_bus_id->instance_no > 0)
acpi_device_bus_id->instance_no--;
else {
list_del(&acpi_device_bus_id->node);
kfree(acpi_device_bus_id);
}
break;
}

list_del(&device->wakeup_list);
mutex_unlock(&acpi_device_lock);

Expand Down

0 comments on commit ca9dc8d

Please sign in to comment.