From: Sami Mujawar Date: Tue, 9 Jul 2019 12:35:02 +0000 (+0100) Subject: DynamicTablesPkg: Fix Proc node length assignment X-Git-Tag: edk2-stable202005~275 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=96bb6704e036a2fb66d41d4ab95e976bcaab7a82;p=mirror_edk2.git DynamicTablesPkg: Fix Proc node length assignment The length field for the Processor Hierarchy node structure is 8-bit wide while the number of private resource field is 32-bit wide. Therefore, the GetProcHierarchyNodeSize() returns the size as a 32-bit value. The VS2017 compiler reports 'warning C4244: '=': conversion from 'UINT32' to 'UINT8', possible loss of data' while assigning the length field of the Processor Hierarchy node structure. To fix this, a type cast is added. In addition, there is a check to ensure that the Processor Hierarchy node size does not exceed MAX_UINT8. Signed-off-by: Sami Mujawar Reviewed-by: Alexei Fedorov --- diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c index 9e42eee9b7..40699ce113 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c @@ -504,6 +504,7 @@ AddProcHierarchyNodes ( PPTT_NODE_INDEXER * ProcNodeIterator; UINT32 NodeCount; + UINT32 Length; ASSERT ( (Generator != NULL) && @@ -539,8 +540,8 @@ AddProcHierarchyNodes ( // imposed on the Processor Hierarchy node by the specification. // Note: The length field is 8 bit wide while the number of private // resource field is 32 bit wide. - if ((sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR) + - (ProcInfoNode->NoOfPrivateResources * sizeof (UINT32))) > MAX_UINT8) { + Length = GetProcHierarchyNodeSize (ProcInfoNode); + if (Length > MAX_UINT8) { Status = EFI_INVALID_PARAMETER; DEBUG (( DEBUG_ERROR, @@ -556,7 +557,7 @@ AddProcHierarchyNodes ( // Populate the node header ProcStruct->Type = EFI_ACPI_6_3_PPTT_TYPE_PROCESSOR; - ProcStruct->Length = GetProcHierarchyNodeSize (ProcInfoNode); + ProcStruct->Length = (UINT8)Length; ProcStruct->Reserved[0] = EFI_ACPI_RESERVED_BYTE; ProcStruct->Reserved[1] = EFI_ACPI_RESERVED_BYTE;