summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2015-04-13 22:22:32 +0000
committerjkim <jkim@FreeBSD.org>2015-04-13 22:22:32 +0000
commit0fda8f1c21afec0324cf5a2becbece60a27f8cf9 (patch)
treed5beb1a2da739a5b729d6abcd90b91194d6b3ab1 /usr.sbin
parent66d912b92f9dd3399214faa151e42cf75090dba3 (diff)
downloadFreeBSD-src-0fda8f1c21afec0324cf5a2becbece60a27f8cf9.zip
FreeBSD-src-0fda8f1c21afec0324cf5a2becbece60a27f8cf9.tar.gz
MFC: r281331
Do not crash when RSDT/XSDT contains an empty entry.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/acpi/acpidump/acpi.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/usr.sbin/acpi/acpidump/acpi.c b/usr.sbin/acpi/acpidump/acpi.c
index ae1b569..b3900d4 100644
--- a/usr.sbin/acpi/acpidump/acpi.c
+++ b/usr.sbin/acpi/acpidump/acpi.c
@@ -1084,17 +1084,10 @@ acpi_print_rsdt(ACPI_TABLE_HEADER *rsdp)
for (i = 0; i < entries; i++) {
if (i > 0)
printf(", ");
- switch (addr_size) {
- case 4:
+ if (addr_size == 4)
addr = le32toh(rsdt->TableOffsetEntry[i]);
- break;
- case 8:
+ else
addr = le64toh(xsdt->TableOffsetEntry[i]);
- break;
- default:
- addr = 0;
- }
- assert(addr != 0);
printf("0x%08lx", addr);
}
printf(" }\n");
@@ -1341,17 +1334,12 @@ acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp)
xsdt = (ACPI_TABLE_XSDT *)rsdp;
entries = (rsdp->Length - sizeof(ACPI_TABLE_HEADER)) / addr_size;
for (i = 0; i < entries; i++) {
- switch (addr_size) {
- case 4:
+ if (addr_size == 4)
addr = le32toh(rsdt->TableOffsetEntry[i]);
- break;
- case 8:
+ else
addr = le64toh(xsdt->TableOffsetEntry[i]);
- break;
- default:
- assert((addr = 0));
- }
-
+ if (addr == 0)
+ continue;
sdp = (ACPI_TABLE_HEADER *)acpi_map_sdt(addr);
if (acpi_checksum(sdp, sdp->Length)) {
warnx("RSDT entry %d (sig %.4s) is corrupt", i,
@@ -1546,16 +1534,12 @@ sdt_from_rsdt(ACPI_TABLE_HEADER *rsdp, const char *sig, ACPI_TABLE_HEADER *last)
xsdt = (ACPI_TABLE_XSDT *)rsdp;
entries = (rsdp->Length - sizeof(ACPI_TABLE_HEADER)) / addr_size;
for (i = 0; i < entries; i++) {
- switch (addr_size) {
- case 4:
+ if (addr_size == 4)
addr = le32toh(rsdt->TableOffsetEntry[i]);
- break;
- case 8:
+ else
addr = le64toh(xsdt->TableOffsetEntry[i]);
- break;
- default:
- assert((addr = 0));
- }
+ if (addr == 0)
+ continue;
sdt = (ACPI_TABLE_HEADER *)acpi_map_sdt(addr);
if (last != NULL) {
if (sdt == last)
OpenPOWER on IntegriCloud