summaryrefslogtreecommitdiffstats
path: root/usr.sbin/acpi
diff options
context:
space:
mode:
authornjl <njl@FreeBSD.org>2004-05-16 18:02:47 +0000
committernjl <njl@FreeBSD.org>2004-05-16 18:02:47 +0000
commite37a9f86efaae2be03df45809ad7f396ddf1e29b (patch)
treed23ff49ed8545a9d1b7e4b092e380f607cf79c9c /usr.sbin/acpi
parentfe85f009b82d6d5ac3b582e0c325d2622fc2c4a9 (diff)
downloadFreeBSD-src-e37a9f86efaae2be03df45809ad7f396ddf1e29b.zip
FreeBSD-src-e37a9f86efaae2be03df45809ad7f396ddf1e29b.tar.gz
If the revision is 0, don't trust the length in the RSDP. Instead assume
an ACPI version 1.0 length.
Diffstat (limited to 'usr.sbin/acpi')
-rw-r--r--usr.sbin/acpi/acpidump/acpi_user.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/usr.sbin/acpi/acpidump/acpi_user.c b/usr.sbin/acpi/acpidump/acpi_user.c
index 91017f1..7bb2d0a 100644
--- a/usr.sbin/acpi/acpidump/acpi_user.c
+++ b/usr.sbin/acpi/acpidump/acpi_user.c
@@ -96,6 +96,7 @@ static struct ACPIrsdp *
acpi_get_rsdp(u_long addr)
{
struct ACPIrsdp rsdp;
+ size_t len;
/* Read in the table signature and check it. */
pread(acpi_mem_fd, &rsdp, 8, addr);
@@ -108,12 +109,16 @@ acpi_get_rsdp(u_long addr)
/* Run the checksum only over the version 1 header. */
if (acpi_checksum(&rsdp, 20))
return (NULL);
+
+ /* If the revision is 0, assume a version 1 length. */
if (rsdp.revision == 0)
- return (NULL);
+ len = 20;
+ else
+ len = rsdp.length;
/* XXX Should handle ACPI 2.0 RSDP extended checksum here. */
- return (acpi_map_physical(addr, rsdp.length));
+ return (acpi_map_physical(addr, len));
}
/*
OpenPOWER on IntegriCloud