]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ACPI: fan: cleanup resources in the error path of .probe()
authorJoe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Wed, 11 Dec 2024 03:28:12 +0000 (12:28 +0900)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 16 Dec 2024 20:22:22 +0000 (21:22 +0100)
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>
drivers/acpi/fan_core.c

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