diff options
author | njl <njl@FreeBSD.org> | 2004-05-16 18:02:47 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2004-05-16 18:02:47 +0000 |
commit | e37a9f86efaae2be03df45809ad7f396ddf1e29b (patch) | |
tree | d23ff49ed8545a9d1b7e4b092e380f607cf79c9c /usr.sbin/acpi | |
parent | fe85f009b82d6d5ac3b582e0c325d2622fc2c4a9 (diff) | |
download | FreeBSD-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.c | 9 |
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)); } /* |