Tolerate checksum errors in ACPI tables (but complain about them). Apparently
authorkettenis <kettenis@openbsd.org>
Sun, 11 Jan 2015 19:59:56 +0000 (19:59 +0000)
committerkettenis <kettenis@openbsd.org>
Sun, 11 Jan 2015 19:59:56 +0000 (19:59 +0000)
there are machines out there with broken BIOSen with such checksum errors in
thier RSDT tables.  Windows runs fine on these machines, so it probably does
not check.  Linux ignores checksum errors as well (and prints a warning).

ok deraadt@, krw@

sys/dev/acpi/acpi.c

index 4f6ce7b..4860aa2 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: acpi.c,v 1.278 2014/12/18 16:31:50 deraadt Exp $ */
+/* $OpenBSD: acpi.c,v 1.279 2015/01/11 19:59:56 kettenis Exp $ */
 /*
  * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
  * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
@@ -1042,10 +1042,10 @@ acpi_maptable(struct acpi_softc *sc, paddr_t addr, const char *sig,
        if (acpi_map(addr, len, &handle))
                return NULL;
        hdr = (struct acpi_table_header *)handle.va;
-       if (acpi_checksum(hdr, len)) {
-               acpi_unmap(&handle);
-               return NULL;
-       }
+       if (acpi_checksum(hdr, len))
+               printf("\n%s: %.4s checksum error",
+                   DEVNAME(sc), hdr->signature);
+
        if ((sig && memcmp(sig, hdr->signature, 4)) ||
            (oem && memcmp(oem, hdr->oemid, 6)) ||
            (tbl && memcmp(tbl, hdr->oemtableid, 8))) {