]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ACPICA: iASL: Fix printing CDAT table header
authorAhmed Salem <x0rw3ll@gmail.com>
Fri, 12 Sep 2025 19:56:18 +0000 (21:56 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 15 Sep 2025 10:20:12 +0000 (12:20 +0200)
When disassembling CDAT AML, the lack of CDAT's common ACPI table header
should be taken into consideration when printing the table's actual
header. As the table header lacks fields like Signature, header
information is mangled and incorrect:

 # $ iasl -d -ds CDAT cdat.aml
 # Input file cdat.aml, Length 0xE4 (228) bytes
 # ACPI: ?    0x0000000000000000 000C01 (v00        ?        00180000 ??   23456789)

Both Signature and Length are printed incorrectly, and the remaining
fields are not applicable for this special table. To fix this, verify
acpi_gbl_CDAT is set (<-ds CDAT> via command line) and Header->Signature
is an invalid nameseg (due to the presence of non-ASCII char(s)), then
print only the explicitly-passed signature (ACPI_SIG_CDAT) and the table
length as cast with a pointer to the struct acpi_table_cdat structure.

Link: https://github.com/acpica/acpica/commit/2b5586b4
Signed-off-by: Ahmed Salem <x0rw3ll@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/tbprint.c

index fd64460a2e2603e3c23e01c4c281d2275d52b1ed..049f6c2f1e321df7ae5844608c4f67f30fdb42fb 100644 (file)
@@ -121,6 +121,14 @@ acpi_tb_print_table_header(acpi_physical_address address,
                           ACPI_CAST_PTR(struct acpi_table_rsdp,
                                         header)->revision,
                           local_header.oem_id));
+       } else if (acpi_gbl_CDAT && !acpi_ut_valid_nameseg(header->signature)) {
+
+               /* CDAT does not use the common ACPI table header */
+
+               ACPI_INFO(("%-4.4s 0x%8.8X%8.8X %06X",
+                          ACPI_SIG_CDAT, ACPI_FORMAT_UINT64(address),
+                          ACPI_CAST_PTR(struct acpi_table_cdat,
+                                        header)->length));
        } else {
                /* Standard ACPI table with full common header */