Author: jkim
Date: Mon Apr 13 22:22:32 2015
New Revision: 281505
URL: https://svnweb.freebsd.org/changeset/base/281505

Log:
  MFC:  r281331
  
  Do not crash when RSDT/XSDT contains an empty entry.

Modified:
  stable/9/usr.sbin/acpi/acpidump/acpi.c
Directory Properties:
  stable/9/usr.sbin/acpi/acpidump/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/10/usr.sbin/acpi/acpidump/acpi.c
  stable/8/usr.sbin/acpi/acpidump/acpi.c
Directory Properties:
  stable/10/   (props changed)
  stable/8/usr.sbin/acpi/acpidump/   (props changed)

Modified: stable/9/usr.sbin/acpi/acpidump/acpi.c
==============================================================================
--- stable/9/usr.sbin/acpi/acpidump/acpi.c      Mon Apr 13 21:33:49 2015        
(r281504)
+++ stable/9/usr.sbin/acpi/acpidump/acpi.c      Mon Apr 13 22:22:32 2015        
(r281505)
@@ -818,17 +818,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");
@@ -1085,17 +1078,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,
@@ -1288,16 +1276,12 @@ sdt_from_rsdt(ACPI_TABLE_HEADER *rsdp, c
        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)
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to