[PATCH v3 1/2] ACPI: processor: idle: Fix memory leak when register cpuidle device failed

Huisong Li posted 2 patches 6 months, 2 weeks ago
[PATCH v3 1/2] ACPI: processor: idle: Fix memory leak when register cpuidle device failed
Posted by Huisong Li 6 months, 2 weeks ago
The cpuidle device's memory has been leaked when register cpuidle
device failed in acpi_processor_power_init().

Fixes: 3d339dcbb56d ("cpuidle / ACPI : move cpuidle_device field out of the acpi_processor_power structure")
Signed-off-by: Huisong Li <lihuisong@huawei.com>
---
 drivers/acpi/processor_idle.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 2c2dc559e0f8..031738390f2d 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -1405,6 +1405,8 @@ int acpi_processor_power_init(struct acpi_processor *pr)
 		if (retval) {
 			if (acpi_processor_registered == 0)
 				cpuidle_unregister_driver(&acpi_idle_driver);
+			kfree(dev);
+			per_cpu(acpi_cpuidle_device, pr->id) = NULL;
 			return retval;
 		}
 		acpi_processor_registered++;
-- 
2.33.0
Re: [PATCH v3 1/2] ACPI: processor: idle: Fix memory leak when register cpuidle device failed
Posted by Rafael J. Wysocki 5 months, 3 weeks ago
On Mon, Jul 28, 2025 at 9:06 AM Huisong Li <lihuisong@huawei.com> wrote:
>
> The cpuidle device's memory has been leaked when register cpuidle
> device failed in acpi_processor_power_init().
>
> Fixes: 3d339dcbb56d ("cpuidle / ACPI : move cpuidle_device field out of the acpi_processor_power structure")
> Signed-off-by: Huisong Li <lihuisong@huawei.com>
> ---
>  drivers/acpi/processor_idle.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
> index 2c2dc559e0f8..031738390f2d 100644
> --- a/drivers/acpi/processor_idle.c
> +++ b/drivers/acpi/processor_idle.c
> @@ -1405,6 +1405,8 @@ int acpi_processor_power_init(struct acpi_processor *pr)
>                 if (retval) {
>                         if (acpi_processor_registered == 0)
>                                 cpuidle_unregister_driver(&acpi_idle_driver);
> +                       kfree(dev);
> +                       per_cpu(acpi_cpuidle_device, pr->id) = NULL;
>                         return retval;
>                 }
>                 acpi_processor_registered++;
> --

Applied as 6.18 material with minor adjustments, thanks!