]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ACPICA: Print error messages for too few or too many arguments
authorSaket Dumbre <saket.dumbre@intel.com>
Fri, 12 Sep 2025 20:01:52 +0000 (22:01 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 15 Sep 2025 10:20:13 +0000 (12:20 +0200)
Fix Issue #1027 by displaying error messages when there are too few or
too many arguments in the caller vs the definition of an ASL/AML method.

Link: https://github.com/acpica/acpica/commit/cbc243e4
Reported-by: Peter Williams <peter@newton.cx>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Hans de Goede <hansg@kernel.org>
Signed-off-by: Saket Dumbre <saket.dumbre@intel.com>
drivers/acpi/acpica/dsmethod.c
include/acpi/acexcep.h

index b2f756b7078d34e26a6e625edc4e09a89fc850e5..45ec32e81903ab2ee7539849d9b0751b3d3247ce 100644 (file)
@@ -483,10 +483,17 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
        }
 
        if (this_walk_state->num_operands < obj_desc->method.param_count) {
-               ACPI_ERROR((AE_INFO, "Missing argument for method [%4.4s]",
+               ACPI_ERROR((AE_INFO, "Missing argument(s) for method [%4.4s]",
                            acpi_ut_get_node_name(method_node)));
 
-               return_ACPI_STATUS(AE_AML_UNINITIALIZED_ARG);
+               return_ACPI_STATUS(AE_AML_TOO_FEW_ARGUMENTS);
+       }
+
+       else if (this_walk_state->num_operands > obj_desc->method.param_count) {
+               ACPI_ERROR((AE_INFO, "Too many arguments for method [%4.4s]",
+                           acpi_ut_get_node_name(method_node)));
+
+               return_ACPI_STATUS(AE_AML_TOO_MANY_ARGUMENTS);
        }
 
        /* Init for new method, possibly wait on method mutex */
index 53c98f5fe3c361674814a8606428cb77398e715d..a2db36d18419a19d69433a37c188568a794cdf9c 100644 (file)
@@ -173,8 +173,10 @@ struct acpi_exception_info {
 #define AE_AML_TARGET_TYPE              EXCEP_AML (0x0023)
 #define AE_AML_PROTOCOL                 EXCEP_AML (0x0024)
 #define AE_AML_BUFFER_LENGTH            EXCEP_AML (0x0025)
+#define AE_AML_TOO_FEW_ARGUMENTS        EXCEP_AML (0x0026)
+#define AE_AML_TOO_MANY_ARGUMENTS       EXCEP_AML (0x0027)
 
-#define AE_CODE_AML_MAX                 0x0025
+#define AE_CODE_AML_MAX                 0x0027
 
 /*
  * Internal exceptions used for control
@@ -353,7 +355,11 @@ static const struct acpi_exception_info acpi_gbl_exception_names_aml[] = {
                  "A target operand of an incorrect type was encountered"),
        EXCEP_TXT("AE_AML_PROTOCOL", "Violation of a fixed ACPI protocol"),
        EXCEP_TXT("AE_AML_BUFFER_LENGTH",
-                 "The length of the buffer is invalid/incorrect")
+                 "The length of the buffer is invalid/incorrect"),
+       EXCEP_TXT("AE_AML_TOO_FEW_ARGUMENTS",
+                 "There are fewer than expected method arguments"),
+       EXCEP_TXT("AE_AML_TOO_MANY_ARGUMENTS",
+                 "There are too many arguments for this method")
 };
 
 static const struct acpi_exception_info acpi_gbl_exception_names_ctrl[] = {