platform/x86: classmate-laptop: Address memory leaks on driver removal

Switch over cmpc_accel_add_v4() and cmpc_accel_add() to using
devm_kzalloc() for allocating the accel object which will cause it
to be freed automatically on device removal, so it won't be leaked
any more.

This also simplifies the rollback paths in these functions somewhat.

Fixes: 529aa8cb0a ("classmate-laptop: add support for Classmate PC ACPI devices")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Link: https://patch.msgid.link/10846403.nUPlyArG6x@rafael.j.wysocki
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
Rafael J. Wysocki 2026-05-11 22:03:34 +02:00 committed by Ilpo Järvinen
parent a417388760
commit 4baf44b405
No known key found for this signature in database
GPG Key ID: 59AC4F6153E5CE31

View File

@ -400,7 +400,7 @@ static int cmpc_accel_add_v4(struct acpi_device *acpi)
struct input_dev *inputdev;
struct cmpc_accel *accel;
accel = kmalloc_obj(*accel);
accel = devm_kzalloc(&acpi->dev, sizeof(*accel), GFP_KERNEL);
if (!accel)
return -ENOMEM;
@ -411,7 +411,7 @@ static int cmpc_accel_add_v4(struct acpi_device *acpi)
error = device_create_file(&acpi->dev, &cmpc_accel_sensitivity_attr_v4);
if (error)
goto failed_sensitivity;
return error;
accel->g_select = CMPC_ACCEL_G_SELECT_DEFAULT;
cmpc_accel_set_g_select_v4(acpi->handle, accel->g_select);
@ -434,8 +434,6 @@ static int cmpc_accel_add_v4(struct acpi_device *acpi)
device_remove_file(&acpi->dev, &cmpc_accel_g_select_attr_v4);
failed_g_select:
device_remove_file(&acpi->dev, &cmpc_accel_sensitivity_attr_v4);
failed_sensitivity:
kfree(accel);
return error;
}
@ -650,7 +648,7 @@ static int cmpc_accel_add(struct acpi_device *acpi)
struct input_dev *inputdev;
struct cmpc_accel *accel;
accel = kmalloc_obj(*accel);
accel = devm_kzalloc(&acpi->dev, sizeof(*accel), GFP_KERNEL);
if (!accel)
return -ENOMEM;
@ -659,7 +657,7 @@ static int cmpc_accel_add(struct acpi_device *acpi)
error = device_create_file(&acpi->dev, &cmpc_accel_sensitivity_attr);
if (error)
goto failed_file;
return error;
error = cmpc_add_acpi_notify_device(acpi, "cmpc_accel",
cmpc_accel_idev_init);
@ -673,8 +671,6 @@ static int cmpc_accel_add(struct acpi_device *acpi)
failed_input:
device_remove_file(&acpi->dev, &cmpc_accel_sensitivity_attr);
failed_file:
kfree(accel);
return error;
}