ACPI: fan: cleanup resources in the error path of .probe()

Call thermal_cooling_device_unregister() and sysfs_remove_link() in the
error path of acpi_fan_probe() to fix possible memory leak.

This bug was found by an experimental static analysis tool that I am
developing.

Fixes: 05a83d972293 ("ACPI: register ACPI Fan as generic thermal cooling device")
Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Link: https://patch.msgid.link/20241211032812.210164-1-joe@pf.is.s.u-tokyo.ac.jp
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Joe Hattori 2024-12-11 12:28:12 +09:00 committed by Rafael J. Wysocki
parent 78d4f34e21
commit c759bc8e90

View File

@ -371,19 +371,25 @@ static int acpi_fan_probe(struct platform_device *pdev)
result = sysfs_create_link(&pdev->dev.kobj, result = sysfs_create_link(&pdev->dev.kobj,
&cdev->device.kobj, &cdev->device.kobj,
"thermal_cooling"); "thermal_cooling");
if (result) if (result) {
dev_err(&pdev->dev, "Failed to create sysfs link 'thermal_cooling'\n"); dev_err(&pdev->dev, "Failed to create sysfs link 'thermal_cooling'\n");
goto err_unregister;
}
result = sysfs_create_link(&cdev->device.kobj, result = sysfs_create_link(&cdev->device.kobj,
&pdev->dev.kobj, &pdev->dev.kobj,
"device"); "device");
if (result) { if (result) {
dev_err(&pdev->dev, "Failed to create sysfs link 'device'\n"); dev_err(&pdev->dev, "Failed to create sysfs link 'device'\n");
goto err_end; goto err_remove_link;
} }
return 0; return 0;
err_remove_link:
sysfs_remove_link(&pdev->dev.kobj, "thermal_cooling");
err_unregister:
thermal_cooling_device_unregister(cdev);
err_end: err_end:
if (fan->acpi4) if (fan->acpi4)
acpi_fan_delete_attributes(device); acpi_fan_delete_attributes(device);