/** @file\r
ACPI table parser\r
\r
- Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.\r
+ Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
**/\r
\r
CONST UINT32* AcpiTableSignature;\r
CONST UINT32* AcpiTableLength;\r
CONST UINT8* AcpiTableRevision;\r
+ CONST UINT8* SignaturePtr;\r
PARSE_ACPI_TABLE_PROC ParserProc;\r
\r
ParseAcpiHeader (\r
\r
if (Trace) {\r
DumpRaw (Ptr, *AcpiTableLength);\r
+\r
+ // Do not process the ACPI table any further if the table length read\r
+ // is invalid. The ACPI table should at least contain the table header.\r
+ if (*AcpiTableLength < sizeof (EFI_ACPI_DESCRIPTION_HEADER)) {\r
+ SignaturePtr = (CONST UINT8*)AcpiTableSignature;\r
+ IncrementErrorCount ();\r
+ Print (\r
+ L"ERROR: Invalid %c%c%c%c table length. Length = %d\n",\r
+ SignaturePtr[0],\r
+ SignaturePtr[1],\r
+ SignaturePtr[2],\r
+ SignaturePtr[3],\r
+ *AcpiTableLength\r
+ );\r
+ return;\r
+ }\r
+\r
if (GetConsistencyChecking ()) {\r
VerifyChecksum (TRUE, Ptr, *AcpiTableLength);\r
}\r