:: commit 890126d10ac2f7b093edfc56e4db43b0115c231d

Mintsuki <mintsuki@protonmail.com> — 2026-02-07 08:18

parents: 6ad9144e72

lib/acpi: Skip null entries in XSDT/RSDT table iteration

diff --git a/common/lib/acpi.c b/common/lib/acpi.c
index 0ba43546..40274ca5 100644
--- a/common/lib/acpi.c
+++ b/common/lib/acpi.c
@@ -299,7 +299,10 @@ void acpi_map_tables(void) {
     map_single_table((uintptr_t)xsdt, (uint32_t)-1);
 
     for (size_t i = 0; i < xsdt_entry_count; i++) {
-        struct sdt *sdt = (void *)(uintptr_t)((uint64_t *)xsdt->ptrs_start)[i];
+        uint64_t entry = ((uint64_t *)xsdt->ptrs_start)[i];
+        if (entry == 0)
+            continue;
+        struct sdt *sdt = (void *)(uintptr_t)entry;
 
         map_single_table((uintptr_t)sdt, (uint32_t)-1);
     }
@@ -318,7 +321,10 @@ no_xsdt:;
     map_single_table((uintptr_t)rsdt, (uint32_t)-1);
 
     for (size_t i = 0; i < rsdt_entry_count; i++) {
-        struct sdt *sdt = (void *)(uintptr_t)((uint32_t *)rsdt->ptrs_start)[i];
+        uint32_t entry = ((uint32_t *)rsdt->ptrs_start)[i];
+        if (entry == 0)
+            continue;
+        struct sdt *sdt = (void *)(uintptr_t)entry;
 
         map_single_table((uintptr_t)sdt, (uint32_t)-1);
     }
tab: 248 wrap: offon