Re: [PATCH v2 2/2] iio: imu: inv_mpu6050: validate ACPI object types in asus_acpi_get_sensor_info()

From: Jonathan Cameron

Date: Mon Oct 26 2026 - 21:07:47 EST


On Mon, 26 Oct 2026 14:20:39 +0000
Tristan Madani <tristmd@xxxxxxxxx> wrote:

> From: Tristan Madani <tristan@xxxxxxxxxxxxxxxxxxx>
>
> asus_acpi_get_sensor_info() iterates through a nested ACPI package
> structure without checking types at either level. The outer object
> returned by acpi_evaluate_object() and each inner element must be
> validated as ACPI_TYPE_PACKAGE before accessing their package.count
> and package.elements members.
>
> Use acpi_evaluate_object_typed() to validate the outer object type
> at evaluation time. Add a type check for each inner element before
> accessing its package contents. Also replace kfree() with
> ACPI_FREE() for the ACPI-allocated buffer.
>
> Fixes: a35c5d1aa96a ("iio: imu: inv_mpu6050: Create mux clients for ACPI")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Tristan Madani <tristan@xxxxxxxxxxxxxxxxxxx>
> ---
> drivers/iio/imu/inv_mpu6050/inv_mpu_acpi.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_acpi.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_acpi.c
> index 460792ed27e031..e5ffa0d5f6b1a2 100644
> --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_acpi.c
> +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_acpi.c
> @@ -52,7 +52,8 @@ static int asus_acpi_get_sensor_info(struct acpi_device *adev,
> union acpi_object *cpm;
> int ret;
>
> - status = acpi_evaluate_object(adev->handle, "CNF0", NULL, &buffer);
> + status = acpi_evaluate_object_typed(adev->handle, "CNF0", NULL,
> + &buffer, ACPI_TYPE_PACKAGE);
Same as previous wrt to indent. In the kernel style guide
this is only there implicitly in examples, but it is definitely
preferred choice for IIO and I don't recall seeing anywhere in
the kernel where this wasn't an acceptable choice.

Jonathan


> if (ACPI_FAILURE(status))
> return -ENODEV;
>
> @@ -62,6 +63,8 @@ static int asus_acpi_get_sensor_info(struct acpi_device *adev,
> int j;
>
> elem = &cpm->package.elements[i];
> + if (elem->type != ACPI_TYPE_PACKAGE)
> + continue;
> for (j = 0; j < elem->package.count; ++j) {
> union acpi_object *sub_elem;
>
> @@ -78,7 +81,7 @@ static int asus_acpi_get_sensor_info(struct acpi_device *adev,
> }
> }
> ret = cpm->package.count;
> - kfree(buffer.pointer);
> + ACPI_FREE(buffer.pointer);
>
> return ret;
> }