]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ACPICA: dispatcher: Use acpi_ds_clear_operands() in acpi_ds_call_control_method()
authorHans de Goede <hansg@kernel.org>
Fri, 12 Sep 2025 20:00:17 +0000 (22:00 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 15 Sep 2025 10:20:13 +0000 (12:20 +0200)
When deleting the previous walkstate operand stack
acpi_ds_call_control_method() was deleting obj_desc->Method.param_count
operands. But Method.param_count does not necessarily match
this_walk_state->num_operands, it may be either less or more.

After correcting the for loop to check `i < this_walk_state->num_operands`
the code is identical to acpi_ds_clear_operands(), so just outright
replace the code with acpi_ds_clear_operands() to fix this.

Link: https://github.com/acpica/acpica/commit/53fc0220
Signed-off-by: Hans de Goede <hansg@kernel.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/dsmethod.c

index fef6fb29ece4d6eb0062c7df11233f519cd387d9..e707a703680264437a79b86be152035c9abd4e17 100644 (file)
@@ -546,14 +546,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
         * Delete the operands on the previous walkstate operand stack
         * (they were copied to new objects)
         */
-       for (i = 0; i < obj_desc->method.param_count; i++) {
-               acpi_ut_remove_reference(this_walk_state->operands[i]);
-               this_walk_state->operands[i] = NULL;
-       }
-
-       /* Clear the operand stack */
-
-       this_walk_state->num_operands = 0;
+       acpi_ds_clear_operands(this_walk_state);
 
        ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
                          "**** Begin nested execution of [%4.4s] **** WalkState=%p\n",