public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH v5 2/6] ShellPkg/AcpiView: Update field-validator prototype
@ 2023-10-02 17:15 Rohit Mathew
  2023-12-05 11:47 ` Sami Mujawar
  0 siblings, 1 reply; 2+ messages in thread
From: Rohit Mathew @ 2023-10-02 17:15 UTC (permalink / raw)
  To: devel; +Cc: Rohit Mathew, James Morse, Sami Mujawar, Thomas Abraham,
	Zhichao Gao

As of now, the field-validator implemented by FNPTR_FIELD_VALIDATOR
function pointer takes two parameters, the pointer to the field and a
context pointer. For cases where the validator has to have access to the
length of the field, there is no clean way to currently do it. In order
to resolve this, this commit updates the field-validator's prototype to
take the length of the field as a third parameter.

This enhancement allows field validators to perform more comprehensive
validation, especially when the length of the field is critical to the
validation logic. This change should improve the overall robustness and
flexibility of AcpiView.

Signed-off-by: Rohit Mathew <Rohit.Mathew@arm.com>
Cc: James Morse <james.Morse@arm.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Thomas Abraham <thomas.abraham@arm.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
---
 ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c              |  6 +--
 ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h              |  5 +-
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c | 32 +++++++----
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c |  8 +--
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c | 20 ++++---
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c | 20 ++++---
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c | 14 +++--
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c |  8 +--
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c | 32 +++++++----
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c | 14 +++--
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c | 56 +++++++++++++-------
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c | 38 ++++++++-----
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c | 14 +++--
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c | 14 +++--
 ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c | 14 +++--
 15 files changed, 190 insertions(+), 105 deletions(-)

diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c
index eac9286176..6823ba60cf 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c
@@ -1,7 +1,7 @@
 /** @file
   ACPI parser
 
-  Copyright (c) 2016 - 2021, Arm Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, Arm Limited. All rights reserved.
   Copyright (c) 2022, AMD Incorporated. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 **/
@@ -616,7 +616,7 @@ ParseAcpi (
       if (GetConsistencyChecking () &&
           (Parser[Index].FieldValidator != NULL))
       {
-        Parser[Index].FieldValidator (Ptr, Parser[Index].Context);
+        Parser[Index].FieldValidator (Ptr, Parser[Index].Context, Parser[Index].Length);
       }
 
       Print (L"\n");
@@ -927,7 +927,7 @@ ParseAcpiBitFields (
       if (GetConsistencyChecking () &&
           (Parser[Index].FieldValidator != NULL))
       {
-        Parser[Index].FieldValidator ((UINT8 *)&Data, Parser[Index].Context);
+        Parser[Index].FieldValidator ((UINT8 *)&Data, Parser[Index].Context, Parser[Index].Length);
       }
 
       Print (L"\n");
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h
index 4b4397961b..6d8b44d94a 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h
@@ -2,7 +2,7 @@
   Header file for ACPI parser
 
   Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
-  Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, Arm Limited. All rights reserved.
   Copyright (c) 2022, AMD Incorporated. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 **/
@@ -237,8 +237,9 @@ typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16 *Format, UINT8 *Ptr);
   @param [in] Context Pointer to context specific information as specified by
                       the 'Context' member of the ACPI_PARSER.
                       e.g. this could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
-typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8 *Ptr, VOID *Context);
+typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8 *Ptr, VOID *Context, UINT32 Length);
 
 /**
   The ACPI_PARSER structure describes the fields of an ACPI table and
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c
index 48f71484fb..a37927b107 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c
@@ -1,7 +1,7 @@
 /** @file
   AEST table parser
 
-  Copyright (c) 2020, Arm Limited.
+  Copyright (c) 2023, Arm Limited.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -35,13 +35,15 @@ STATIC UINT8                         *ProcessorResourceType;
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateProcessorFlags (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   // If the global or shared node flag is set then the ACPI Processor ID
@@ -61,13 +63,15 @@ ValidateProcessorFlags (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateGicInterfaceType (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT32  GicInterfaceType;
@@ -85,13 +89,15 @@ ValidateGicInterfaceType (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateInterfaceType (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*Ptr > 1) {
@@ -106,13 +112,15 @@ ValidateInterfaceType (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateInterruptType (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*Ptr > 1) {
@@ -127,13 +135,15 @@ ValidateInterruptType (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateInterruptFlags (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if ((*Ptr & 0xfe) != 0) {
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
index d25d4d84f8..4400b55553 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
@@ -1,7 +1,7 @@
 /** @file
   DBG2 table parser
 
-  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -32,13 +32,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
   @param [in] Ptr     Pointer to the start of the buffer.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateNameSpaceStrLen (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT16  NameSpaceStrLen;
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c
index f3ae09309c..f9f08732ca 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c
@@ -2,7 +2,7 @@
   ERST table parser
 
   Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
-  Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -72,13 +72,15 @@ STATIC CONST CHAR16  *ErstInstructionTable[] = {
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateErstAction (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*Ptr > EFI_ACPI_6_4_ERST_GET_EXECUTE_OPERATION_TIMINGS) {
@@ -93,13 +95,15 @@ ValidateErstAction (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateErstInstruction (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*Ptr > EFI_ACPI_6_4_ERST_MOVE_DATA) {
@@ -114,13 +118,15 @@ ValidateErstInstruction (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateErstFlags (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if ((*Ptr & 0xfe) != 0) {
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c
index abc58d6552..f03b99ebde 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c
@@ -1,7 +1,7 @@
 /** @file
   FADT table parser
 
-  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   Copyright (c) 2022, AMD Incorporated. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -59,13 +59,15 @@ GetAcpiXsdtHeaderInfo (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateFirmwareCtrl (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@@ -85,13 +87,15 @@ ValidateFirmwareCtrl (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateXFirmwareCtrl (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@@ -111,13 +115,15 @@ ValidateXFirmwareCtrl (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateFlags (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c
index e62927098a..29bd781465 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c
@@ -1,7 +1,7 @@
 /** @file
   GTDT table parser
 
-  Copyright (c) 2016 - 2021, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -32,13 +32,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateGtBlockTimerCount (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT32  BlockTimerCount;
@@ -61,13 +63,15 @@ ValidateGtBlockTimerCount (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateGtFrameNumber (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT8  FrameNumber;
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c
index 2a1357c853..de8e9cf01f 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c
@@ -1,7 +1,7 @@
 /** @file
   HMAT table parser
 
-  Copyright (c) 2020, Arm Limited.
+  Copyright (c) 2023, Arm Limited.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -56,13 +56,15 @@ STATIC CONST CHAR16  *SllbiNames[] = {
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateCacheAttributes (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES *
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c
index 599cf0ee8f..122e087eed 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c
@@ -1,7 +1,7 @@
 /** @file
   IORT table parser
 
-  Copyright (c) 2016 - 2022, Arm Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, Arm Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -48,13 +48,15 @@ STATIC CONST UINT32  *RmrMemDescOffset;
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateItsIdMappingCount (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT32 *)Ptr != 0) {
@@ -70,13 +72,15 @@ ValidateItsIdMappingCount (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePmcgIdMappingCount (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT32 *)Ptr > 1) {
@@ -91,13 +95,15 @@ ValidatePmcgIdMappingCount (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateItsIdArrayReference (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT32 *)Ptr != 0) {
@@ -113,13 +119,15 @@ ValidateItsIdArrayReference (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePhysicalRange (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT64  Value;
@@ -137,13 +145,15 @@ ValidatePhysicalRange (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateRmrMemDescCount (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT32 *)Ptr == 0) {
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c
index 41edcb9ffd..3633329bea 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c
@@ -1,7 +1,7 @@
 /** @file
   MADT table parser
 
-  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   Copyright (c) 2022, AMD Incorporated. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -30,13 +30,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateGICDSystemVectorBase (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT32 *)Ptr != 0) {
@@ -53,13 +55,15 @@ ValidateGICDSystemVectorBase (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateSpeOverflowInterrupt (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT16  SpeOverflowInterrupt;
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c
index 8ad39090af..5d350ae16d 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c
@@ -1,7 +1,7 @@
 /** @file
   PCCT table parser
 
-  Copyright (c) 2021, Arm Limited.
+  Copyright (c) 2023, Arm Limited.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -30,13 +30,15 @@ STATIC UINT8   *ExtendedPccSubspaceInterruptFlags;
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateRangeLength4 (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT32 *)Ptr < MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN) {
@@ -56,13 +58,15 @@ ValidateRangeLength4 (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateRangeLength8 (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT64 *)Ptr <= MIN_MEMORY_RANGE_LENGTH) {
@@ -82,13 +86,15 @@ ValidateRangeLength8 (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePccMemoryIoGas (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   switch (*(UINT8 *)Ptr) {
@@ -109,13 +115,15 @@ ValidatePccMemoryIoGas (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePccGas (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   switch (*(UINT8 *)Ptr) {
@@ -137,13 +145,15 @@ ValidatePccGas (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePccDoorbellGas (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   // For responder subspaces this field is optional, if not present the field
@@ -158,7 +168,7 @@ ValidatePccDoorbellGas (
     }
   }
 
-  ValidatePccGas (Ptr, Context);
+  ValidatePccGas (Ptr, Context, Length);
 }
 
 /**
@@ -168,13 +178,15 @@ ValidatePccDoorbellGas (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePccIntAckGas (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   // If the subspace does not support interrupts or the interrupt is
@@ -196,7 +208,7 @@ ValidatePccIntAckGas (
     }
   }
 
-  ValidatePccGas (Ptr, Context);
+  ValidatePccGas (Ptr, Context, Length);
 }
 
 /**
@@ -205,13 +217,15 @@ ValidatePccIntAckGas (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePccErrStatusGas (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   // This field is ignored by the OSPM on responder channels.
@@ -219,7 +233,7 @@ ValidatePccErrStatusGas (
     return;
   }
 
-  ValidatePccGas (Ptr, Context);
+  ValidatePccGas (Ptr, Context, Length);
 }
 
 /**
@@ -228,13 +242,15 @@ ValidatePccErrStatusGas (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidatePlatInterrupt (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   // If a responder subspace is present in the PCCT, then the global Platform
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c
index 5377764458..a079d2498f 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c
@@ -1,7 +1,7 @@
 /** @file
   PPTT table parser
 
-  Copyright (c) 2019 - 2021, ARM Limited. All rights reserved.
+  Copyright (c) 2019 - 2023, ARM Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -54,13 +54,15 @@ LogCacheFlagError (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateCacheFlags (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@@ -117,13 +119,15 @@ ValidateCacheFlags (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateCacheNumberOfSets (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT32  NumberOfSets;
@@ -168,13 +172,15 @@ ValidateCacheNumberOfSets (
   @param [in] Ptr       Pointer to the start of the field data.
   @param [in] Context   Pointer to context specific information e.g. this
                         could be a pointer to the ACPI table header.
+  @param [in] Length    Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateCacheAssociativity (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT8  Associativity;
@@ -194,13 +200,15 @@ ValidateCacheAssociativity (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateCacheLineSize (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@@ -239,13 +247,15 @@ ValidateCacheLineSize (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateCacheId (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT32  CacheId;
@@ -278,13 +288,15 @@ ValidateCacheId (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateCacheAttributes (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   // Reference: Advanced Configuration and Power Interface (ACPI) Specification
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c
index bddf276356..8d58392b08 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c
@@ -1,7 +1,7 @@
 /** @file
   RSDP table parser
 
-  Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -21,13 +21,15 @@ STATIC CONST UINT64  *XsdtAddress;
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateRsdtAddress (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@@ -57,13 +59,15 @@ ValidateRsdtAddress (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateXsdtAddress (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c
index e5267b1d04..60522dd408 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c
@@ -1,7 +1,7 @@
 /** @file
   SPCR table parser
 
-  Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -24,13 +24,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateInterruptType (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@@ -57,13 +59,15 @@ ValidateInterruptType (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateIrq (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
  #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c
index 2980704479..76534ccee3 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c
@@ -1,7 +1,7 @@
 /** @file
   SRAT table parser
 
-  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Reference(s):
@@ -27,13 +27,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateSratReserved (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   if (*(UINT32 *)Ptr != 1) {
@@ -49,13 +51,15 @@ ValidateSratReserved (
   @param [in] Ptr     Pointer to the start of the field data.
   @param [in] Context Pointer to context specific information e.g. this
                       could be a pointer to the ACPI table header.
+  @param [in] Length  Length of the field.
 **/
 STATIC
 VOID
 EFIAPI
 ValidateSratDeviceHandleType (
-  IN UINT8  *Ptr,
-  IN VOID   *Context
+  IN UINT8   *Ptr,
+  IN VOID    *Context,
+  IN UINT32  Length
   )
 {
   UINT8  DeviceHandleType;
-- 
2.34.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109260): https://edk2.groups.io/g/devel/message/109260
Mute This Topic: https://groups.io/mt/101716935/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [edk2-devel] [PATCH v5 2/6] ShellPkg/AcpiView: Update field-validator prototype
  2023-10-02 17:15 [edk2-devel] [PATCH v5 2/6] ShellPkg/AcpiView: Update field-validator prototype Rohit Mathew
@ 2023-12-05 11:47 ` Sami Mujawar
  0 siblings, 0 replies; 2+ messages in thread
From: Sami Mujawar @ 2023-12-05 11:47 UTC (permalink / raw)
  To: Rohit Mathew, devel; +Cc: James Morse, Thomas Abraham, Zhichao Gao, nd@arm.com

Hi Rohit,

Thank you for this patch.

I haev a minor suggestion to marked inline as [SAMI] which involves 
moving the Length as the second parameter in the validator function.

Unfortunately this would mean changes across the entire patch. But I 
think it provides better grouping of parameters.

With that addressed,

Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>

Regards,

Sami Mujawar

On 02/10/2023 06:15 pm, Rohit Mathew wrote:
> As of now, the field-validator implemented by FNPTR_FIELD_VALIDATOR
> function pointer takes two parameters, the pointer to the field and a
> context pointer. For cases where the validator has to have access to the
> length of the field, there is no clean way to currently do it. In order
> to resolve this, this commit updates the field-validator's prototype to
> take the length of the field as a third parameter.
>
> This enhancement allows field validators to perform more comprehensive
> validation, especially when the length of the field is critical to the
> validation logic. This change should improve the overall robustness and
> flexibility of AcpiView.
>
> Signed-off-by: Rohit Mathew<Rohit.Mathew@arm.com>
> Cc: James Morse<james.Morse@arm.com>
> Cc: Sami Mujawar<sami.mujawar@arm.com>
> Cc: Thomas Abraham<thomas.abraham@arm.com>
> Cc: Zhichao Gao<zhichao.gao@intel.com>
> ---
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c              |  6 +--
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h              |  5 +-
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c | 32 +++++++----
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c |  8 +--
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c | 20 ++++---
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c | 20 ++++---
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c | 14 +++--
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c |  8 +--
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c | 32 +++++++----
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c | 14 +++--
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c | 56 +++++++++++++-------
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c | 38 ++++++++-----
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c | 14 +++--
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c | 14 +++--
>   ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c | 14 +++--
>   15 files changed, 190 insertions(+), 105 deletions(-)
>
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c
> index eac9286176..6823ba60cf 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     ACPI parser
>   
> -  Copyright (c) 2016 - 2021, Arm Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, Arm Limited. All rights reserved.
>     Copyright (c) 2022, AMD Incorporated. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   **/
> @@ -616,7 +616,7 @@ ParseAcpi (
>         if (GetConsistencyChecking () &&
>             (Parser[Index].FieldValidator != NULL))
>         {
> -        Parser[Index].FieldValidator (Ptr, Parser[Index].Context);
> +        Parser[Index].FieldValidator (Ptr, Parser[Index].Context, Parser[Index].Length);
>         }
>   
>         Print (L"\n");
> @@ -927,7 +927,7 @@ ParseAcpiBitFields (
>         if (GetConsistencyChecking () &&
>             (Parser[Index].FieldValidator != NULL))
>         {
> -        Parser[Index].FieldValidator ((UINT8 *)&Data, Parser[Index].Context);
> +        Parser[Index].FieldValidator ((UINT8 *)&Data, Parser[Index].Context, Parser[Index].Length);
>         }
>   
>         Print (L"\n");
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h
> index 4b4397961b..6d8b44d94a 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h
> @@ -2,7 +2,7 @@
>     Header file for ACPI parser
>   
>     Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
> -  Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, Arm Limited. All rights reserved.
>     Copyright (c) 2022, AMD Incorporated. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   **/
> @@ -237,8 +237,9 @@ typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16 *Format, UINT8 *Ptr);
>     @param [in] Context Pointer to context specific information as specified by
>                         the 'Context' member of the ACPI_PARSER.
>                         e.g. this could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
> -typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8 *Ptr, VOID *Context);
> +typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8 *Ptr, VOID *Context, UINT32 Length);
[SAMI] I would prefer the Length field to be the second parameter.
>   
>   /**
>     The ACPI_PARSER structure describes the fields of an ACPI table and
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c
> index 48f71484fb..a37927b107 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Aest/AestParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     AEST table parser
>   
> -  Copyright (c) 2020, Arm Limited.
> +  Copyright (c) 2023, Arm Limited.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -35,13 +35,15 @@ STATIC UINT8                         *ProcessorResourceType;
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateProcessorFlags (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     // If the global or shared node flag is set then the ACPI Processor ID
> @@ -61,13 +63,15 @@ ValidateProcessorFlags (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateGicInterfaceType (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT32  GicInterfaceType;
> @@ -85,13 +89,15 @@ ValidateGicInterfaceType (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateInterfaceType (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*Ptr > 1) {
> @@ -106,13 +112,15 @@ ValidateInterfaceType (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateInterruptType (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*Ptr > 1) {
> @@ -127,13 +135,15 @@ ValidateInterruptType (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateInterruptFlags (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if ((*Ptr & 0xfe) != 0) {
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
> index d25d4d84f8..4400b55553 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     DBG2 table parser
>   
> -  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -32,13 +32,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
>     @param [in] Ptr     Pointer to the start of the buffer.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateNameSpaceStrLen (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT16  NameSpaceStrLen;
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c
> index f3ae09309c..f9f08732ca 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Erst/ErstParser.c
> @@ -2,7 +2,7 @@
>     ERST table parser
>   
>     Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
> -  Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -72,13 +72,15 @@ STATIC CONST CHAR16  *ErstInstructionTable[] = {
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateErstAction (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*Ptr > EFI_ACPI_6_4_ERST_GET_EXECUTE_OPERATION_TIMINGS) {
> @@ -93,13 +95,15 @@ ValidateErstAction (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateErstInstruction (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*Ptr > EFI_ACPI_6_4_ERST_MOVE_DATA) {
> @@ -114,13 +118,15 @@ ValidateErstInstruction (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateErstFlags (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if ((*Ptr & 0xfe) != 0) {
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c
> index abc58d6552..f03b99ebde 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Fadt/FadtParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     FADT table parser
>   
> -  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     Copyright (c) 2022, AMD Incorporated. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
> @@ -59,13 +59,15 @@ GetAcpiXsdtHeaderInfo (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateFirmwareCtrl (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> @@ -85,13 +87,15 @@ ValidateFirmwareCtrl (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateXFirmwareCtrl (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> @@ -111,13 +115,15 @@ ValidateXFirmwareCtrl (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateFlags (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c
> index e62927098a..29bd781465 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Gtdt/GtdtParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     GTDT table parser
>   
> -  Copyright (c) 2016 - 2021, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -32,13 +32,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateGtBlockTimerCount (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT32  BlockTimerCount;
> @@ -61,13 +63,15 @@ ValidateGtBlockTimerCount (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateGtFrameNumber (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT8  FrameNumber;
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c
> index 2a1357c853..de8e9cf01f 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Hmat/HmatParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     HMAT table parser
>   
> -  Copyright (c) 2020, Arm Limited.
> +  Copyright (c) 2023, Arm Limited.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -56,13 +56,15 @@ STATIC CONST CHAR16  *SllbiNames[] = {
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateCacheAttributes (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES *
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c
> index 599cf0ee8f..122e087eed 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Iort/IortParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     IORT table parser
>   
> -  Copyright (c) 2016 - 2022, Arm Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, Arm Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -48,13 +48,15 @@ STATIC CONST UINT32  *RmrMemDescOffset;
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateItsIdMappingCount (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT32 *)Ptr != 0) {
> @@ -70,13 +72,15 @@ ValidateItsIdMappingCount (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePmcgIdMappingCount (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT32 *)Ptr > 1) {
> @@ -91,13 +95,15 @@ ValidatePmcgIdMappingCount (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateItsIdArrayReference (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT32 *)Ptr != 0) {
> @@ -113,13 +119,15 @@ ValidateItsIdArrayReference (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePhysicalRange (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT64  Value;
> @@ -137,13 +145,15 @@ ValidatePhysicalRange (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateRmrMemDescCount (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT32 *)Ptr == 0) {
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c
> index 41edcb9ffd..3633329bea 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     MADT table parser
>   
> -  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     Copyright (c) 2022, AMD Incorporated. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
> @@ -30,13 +30,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateGICDSystemVectorBase (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT32 *)Ptr != 0) {
> @@ -53,13 +55,15 @@ ValidateGICDSystemVectorBase (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateSpeOverflowInterrupt (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT16  SpeOverflowInterrupt;
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c
> index 8ad39090af..5d350ae16d 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     PCCT table parser
>   
> -  Copyright (c) 2021, Arm Limited.
> +  Copyright (c) 2023, Arm Limited.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -30,13 +30,15 @@ STATIC UINT8   *ExtendedPccSubspaceInterruptFlags;
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateRangeLength4 (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT32 *)Ptr < MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN) {
> @@ -56,13 +58,15 @@ ValidateRangeLength4 (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateRangeLength8 (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT64 *)Ptr <= MIN_MEMORY_RANGE_LENGTH) {
> @@ -82,13 +86,15 @@ ValidateRangeLength8 (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePccMemoryIoGas (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     switch (*(UINT8 *)Ptr) {
> @@ -109,13 +115,15 @@ ValidatePccMemoryIoGas (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePccGas (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     switch (*(UINT8 *)Ptr) {
> @@ -137,13 +145,15 @@ ValidatePccGas (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePccDoorbellGas (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     // For responder subspaces this field is optional, if not present the field
> @@ -158,7 +168,7 @@ ValidatePccDoorbellGas (
>       }
>     }
>   
> -  ValidatePccGas (Ptr, Context);
> +  ValidatePccGas (Ptr, Context, Length);
>   }
>   
>   /**
> @@ -168,13 +178,15 @@ ValidatePccDoorbellGas (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePccIntAckGas (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     // If the subspace does not support interrupts or the interrupt is
> @@ -196,7 +208,7 @@ ValidatePccIntAckGas (
>       }
>     }
>   
> -  ValidatePccGas (Ptr, Context);
> +  ValidatePccGas (Ptr, Context, Length);
>   }
>   
>   /**
> @@ -205,13 +217,15 @@ ValidatePccIntAckGas (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePccErrStatusGas (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     // This field is ignored by the OSPM on responder channels.
> @@ -219,7 +233,7 @@ ValidatePccErrStatusGas (
>       return;
>     }
>   
> -  ValidatePccGas (Ptr, Context);
> +  ValidatePccGas (Ptr, Context, Length);
>   }
>   
>   /**
> @@ -228,13 +242,15 @@ ValidatePccErrStatusGas (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidatePlatInterrupt (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     // If a responder subspace is present in the PCCT, then the global Platform
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c
> index 5377764458..a079d2498f 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     PPTT table parser
>   
> -  Copyright (c) 2019 - 2021, ARM Limited. All rights reserved.
> +  Copyright (c) 2019 - 2023, ARM Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -54,13 +54,15 @@ LogCacheFlagError (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateCacheFlags (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> @@ -117,13 +119,15 @@ ValidateCacheFlags (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateCacheNumberOfSets (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT32  NumberOfSets;
> @@ -168,13 +172,15 @@ ValidateCacheNumberOfSets (
>     @param [in] Ptr       Pointer to the start of the field data.
>     @param [in] Context   Pointer to context specific information e.g. this
>                           could be a pointer to the ACPI table header.
> +  @param [in] Length    Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateCacheAssociativity (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT8  Associativity;
> @@ -194,13 +200,15 @@ ValidateCacheAssociativity (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateCacheLineSize (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> @@ -239,13 +247,15 @@ ValidateCacheLineSize (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateCacheId (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT32  CacheId;
> @@ -278,13 +288,15 @@ ValidateCacheId (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateCacheAttributes (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     // Reference: Advanced Configuration and Power Interface (ACPI) Specification
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c
> index bddf276356..8d58392b08 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Rsdp/RsdpParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     RSDP table parser
>   
> -  Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -21,13 +21,15 @@ STATIC CONST UINT64  *XsdtAddress;
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateRsdtAddress (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> @@ -57,13 +59,15 @@ ValidateRsdtAddress (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateXsdtAddress (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c
> index e5267b1d04..60522dd408 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Spcr/SpcrParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     SPCR table parser
>   
> -  Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -24,13 +24,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateInterruptType (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> @@ -57,13 +59,15 @@ ValidateInterruptType (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateIrq (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>    #if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c
> index 2980704479..76534ccee3 100644
> --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c
> +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Srat/SratParser.c
> @@ -1,7 +1,7 @@
>   /** @file
>     SRAT table parser
>   
> -  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
> +  Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
>     @par Reference(s):
> @@ -27,13 +27,15 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateSratReserved (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     if (*(UINT32 *)Ptr != 1) {
> @@ -49,13 +51,15 @@ ValidateSratReserved (
>     @param [in] Ptr     Pointer to the start of the field data.
>     @param [in] Context Pointer to context specific information e.g. this
>                         could be a pointer to the ACPI table header.
> +  @param [in] Length  Length of the field.
>   **/
>   STATIC
>   VOID
>   EFIAPI
>   ValidateSratDeviceHandleType (
> -  IN UINT8  *Ptr,
> -  IN VOID   *Context
> +  IN UINT8   *Ptr,
> +  IN VOID    *Context,
> +  IN UINT32  Length
>     )
>   {
>     UINT8  DeviceHandleType;


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112075): https://edk2.groups.io/g/devel/message/112075
Mute This Topic: https://groups.io/mt/101716935/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-12-05 11:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-02 17:15 [edk2-devel] [PATCH v5 2/6] ShellPkg/AcpiView: Update field-validator prototype Rohit Mathew
2023-12-05 11:47 ` Sami Mujawar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox