diff options
| author | Heinrich Schuchardt <[email protected]> | 2026-04-20 18:47:25 +0200 |
|---|---|---|
| committer | Simon Glass <[email protected]> | 2026-05-11 12:04:43 -0600 |
| commit | 3d09ec64ebabffdd962b1a683a6b239773065850 (patch) | |
| tree | 8d6fc241034c12d2bb7a8f36435efbd736ee5a0c /lib | |
| parent | 22a285380e35a31d0a882af66278bc1edc1b917e (diff) | |
acpi: fix initial RSDT and XSDT size
When creating the RSDT and the XSDT table they contain no entries.
The table size therefore must equal the header size.
Without this change a NULL deference has been observed in
acpi_find_table() when running `ut dm` on sandbox64_defconfig
executed via `sudo ./u-boot -D`.
Fixes: 94ba15a3f13f ("x86: Move base tables to a writer function")
Fixes: 7e586f69070d ("acpi: Put table-setup code in its own function")
Fixes: ab5efd576c4e ("x86: acpi: Adjust order in acpi_table.c")
Fixes: 867bcb63e79f ("x86: Generate a valid ACPI table")
Signed-off-by: Heinrich Schuchardt <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
Update dm_test_acpi_ctx_and_base_tables() in test/dm/acpi.c to expect
sizeof(struct acpi_table_header) for the initial table length (instead
of sizeof(*rsdt) / sizeof(*xsdt)), and to compute the checksum over
header->length bytes rather than the full struct size:
Signed-off-by: Simon Glass <[email protected]>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/acpi/base.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/acpi/base.c b/lib/acpi/base.c index 5c755b14c16..01ebad8994a 100644 --- a/lib/acpi/base.c +++ b/lib/acpi/base.c @@ -44,7 +44,7 @@ static void acpi_write_rsdt(struct acpi_rsdt *rsdt) /* Fill out header fields */ acpi_fill_header(header, "RSDT"); - header->length = sizeof(struct acpi_rsdt); + header->length = sizeof(struct acpi_table_header); header->revision = 1; /* Entries are filled in later, we come with an empty set */ @@ -59,7 +59,7 @@ static void acpi_write_xsdt(struct acpi_xsdt *xsdt) /* Fill out header fields */ acpi_fill_header(header, "XSDT"); - header->length = sizeof(struct acpi_xsdt); + header->length = sizeof(struct acpi_table_header); header->revision = 1; /* Entries are filled in later, we come with an empty set */ |
