mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ACPI / scan: Fix acpi_bus_id_list bookkeeping
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>
This commit is contained in:
		
							parent
							
								
									e399037e06
								
							
						
					
					
						commit
						ca9dc8d42b
					
				
					 1 changed files with 14 additions and 0 deletions
				
			
		| 
						 | 
					@ -471,10 +471,24 @@ static void acpi_device_release(struct device *dev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void acpi_device_del(struct acpi_device *device)
 | 
					static void acpi_device_del(struct acpi_device *device)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						struct acpi_device_bus_id *acpi_device_bus_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_lock(&acpi_device_lock);
 | 
						mutex_lock(&acpi_device_lock);
 | 
				
			||||||
	if (device->parent)
 | 
						if (device->parent)
 | 
				
			||||||
		list_del(&device->node);
 | 
							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);
 | 
						list_del(&device->wakeup_list);
 | 
				
			||||||
	mutex_unlock(&acpi_device_lock);
 | 
						mutex_unlock(&acpi_device_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue