diff --git a/sys/platform/pc64/acpica/acpi_sdt.c b/sys/platform/pc64/acpica/acpi_sdt.c --- a/sys/platform/pc64/acpica/acpi_sdt.c +++ b/sys/platform/pc64/acpica/acpi_sdt.c @@ -128,8 +128,15 @@ for (i = 0; i < size - sizeof(*rsdp); i += ACPI_RSDP_SCAN_STEP) { rsdp = (const ACPI_TABLE_RSDP *)&target[i]; if (memcmp(rsdp->Signature, ACPI_SIG_RSDP, - sizeof(rsdp->Signature)) == 0) - return rsdp; + sizeof(rsdp->Signature)) == 0) { + /* DF-1114: validate ACPI 1.0 checksum (first 20 bytes) */ + uint8_t sum = 0; + int j; + for (j = 0; j < 20; j++) + sum += ((const uint8_t *)rsdp)[j]; + if (sum == 0) + return rsdp; + } } return NULL; }