]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ACPI: fan: Use platform device for devres-related actions
authorArmin Wolf <W_Armin@gmx.de>
Tue, 7 Oct 2025 23:41:46 +0000 (01:41 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:36:36 +0000 (15:36 -0500)
commit d91a1d129b63614fa4c2e45e60918409ce36db7e upstream.

Device-managed resources are cleaned up when the driver unbinds from
the underlying device. In our case this is the platform device as this
driver is a platform driver. Registering device-managed resources on
the associated ACPI device will thus result in a resource leak when
this driver unbinds.

Ensure that any device-managed resources are only registered on the
platform device to ensure that they are cleaned up during removal.

Fixes: 35c50d853adc ("ACPI: fan: Add hwmon support")
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Cc: 6.11+ <stable@vger.kernel.org> # 6.11+
Link: https://patch.msgid.link/20251007234149.2769-4-W_Armin@gmx.de
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/acpi/fan.h
drivers/acpi/fan_core.c
drivers/acpi/fan_hwmon.c

index 8a28a72a7c6a3084348d0cdb8bd5733bebca2d92..bf05a4b8e998671de82154795fb49e03e60f46ac 100644 (file)
@@ -64,9 +64,9 @@ int acpi_fan_create_attributes(struct acpi_device *device);
 void acpi_fan_delete_attributes(struct acpi_device *device);
 
 #if IS_REACHABLE(CONFIG_HWMON)
-int devm_acpi_fan_create_hwmon(struct acpi_device *device);
+int devm_acpi_fan_create_hwmon(struct device *dev);
 #else
-static inline int devm_acpi_fan_create_hwmon(struct acpi_device *device) { return 0; };
+static inline int devm_acpi_fan_create_hwmon(struct device *dev) { return 0; };
 #endif
 
 #endif
index 095502086b41205ae4470a0e733384e64a6f0607..6e64f107327f0c8ab0a3594ca195f350aa20206b 100644 (file)
@@ -347,7 +347,7 @@ static int acpi_fan_probe(struct platform_device *pdev)
        }
 
        if (fan->has_fst) {
-               result = devm_acpi_fan_create_hwmon(device);
+               result = devm_acpi_fan_create_hwmon(&pdev->dev);
                if (result)
                        return result;
 
index e8d90605106efad4c10ae22c82a61c64224f8fa0..cba1f096d9717e66fc3c542decf12d88e6c2bf57 100644 (file)
@@ -167,12 +167,12 @@ static const struct hwmon_chip_info acpi_fan_hwmon_chip_info = {
        .info = acpi_fan_hwmon_info,
 };
 
-int devm_acpi_fan_create_hwmon(struct acpi_device *device)
+int devm_acpi_fan_create_hwmon(struct device *dev)
 {
-       struct acpi_fan *fan = acpi_driver_data(device);
+       struct acpi_fan *fan = dev_get_drvdata(dev);
        struct device *hdev;
 
-       hdev = devm_hwmon_device_register_with_info(&device->dev, "acpi_fan", fan,
-                                                   &acpi_fan_hwmon_chip_info, NULL);
+       hdev = devm_hwmon_device_register_with_info(dev, "acpi_fan", fan, &acpi_fan_hwmon_chip_info,
+                                                   NULL);
        return PTR_ERR_OR_ZERO(hdev);
 }