mirror of
https://github.com/acpica/acpica/
synced 2025-02-19 15:04:30 +03:00
iASL/disassembler: avoid infinite loop on bad ACPI tables.
Check for zero-length subtables when disassembling ACPI tables. Also fixes a couple of errors where a full 16-bit table type was not extracted from the input properly.
This commit is contained in:
parent
f2d758c956
commit
853c286f14
@ -744,26 +744,26 @@ AcpiDmDumpTable (
|
||||
|
||||
/* DMAR subtable types */
|
||||
|
||||
Temp16 = *Target;
|
||||
Temp16 = ACPI_GET16 (Target);
|
||||
if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
|
||||
{
|
||||
Temp16 = ACPI_DMAR_TYPE_RESERVED;
|
||||
}
|
||||
|
||||
AcpiOsPrintf ("%4.4X <%s>\n", *Target, AcpiDmDmarSubnames[Temp16]);
|
||||
AcpiOsPrintf ("%4.4X <%s>\n", ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]);
|
||||
break;
|
||||
|
||||
case ACPI_DMT_HEST:
|
||||
|
||||
/* HEST subtable types */
|
||||
|
||||
Temp16 = *Target;
|
||||
Temp16 = ACPI_GET16 (Target);
|
||||
if (Temp16 > ACPI_HEST_TYPE_RESERVED)
|
||||
{
|
||||
Temp16 = ACPI_HEST_TYPE_RESERVED;
|
||||
}
|
||||
|
||||
AcpiOsPrintf ("%4.4X (%s)\n", *Target, AcpiDmHestSubnames[Temp16]);
|
||||
AcpiOsPrintf ("%4.4X (%s)\n", ACPI_GET16 (Target), AcpiDmHestSubnames[Temp16]);
|
||||
break;
|
||||
|
||||
case ACPI_DMT_HESTNTFY:
|
||||
@ -825,6 +825,14 @@ AcpiDmDumpTable (
|
||||
}
|
||||
}
|
||||
|
||||
if (TableOffset && !SubtableLength)
|
||||
{
|
||||
/* If this table is not the main table, subtable must have valid length */
|
||||
|
||||
AcpiOsPrintf ("Invalid zero length subtable\n");
|
||||
return (AE_BAD_DATA);
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user