[edk2-devel] [PATCH v1 06/19] DynamicTablesPkg: Fix GT Block length assignment

Philippe Mathieu-Daudé via Groups.Io philmd=redhat.com at groups.io
Thu Nov 21 15:56:21 UTC 2019


On 8/23/19 12:55 PM, Sami Mujawar wrote:
> The VS2017 compiler reports 'warning C4267: '=': conversion from
> 'size_t' to 'UINT16', possible loss of data'.
> 
> The sizeof() operator is used to calculate the size of the
> GT Block structure. The length field in the GT Block structure
> is 16-bit wide. Since the return type of sizeof() operator
> is size_t the VS2017 compiler reports the above warning.
> 
> To fix the warning, an explicit type cast is added. An additional
> check is also performed to ensure that the calculated GT Block
> length does not exceed MAX_UINT16.
> 
> Signed-off-by: Sami Mujawar <sami.mujawar at arm.com>
> ---
>   DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c | 25 ++++++++++++++++----
>   1 file changed, 21 insertions(+), 4 deletions(-)
> 
> diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c
> index 7e86c30649bd36ecebac75c7e3a86a0c25cd590b..0e996698887aefca8a7240fc27fe3cb9324fd3e2 100644
> --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c
> +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c
> @@ -350,6 +350,7 @@ AddGTBlockList (
>     EFI_ACPI_6_3_GTDT_GT_BLOCK_TIMER_STRUCTURE  * GtBlockFrame;
>     CM_ARM_GTBLOCK_TIMER_FRAME_INFO             * GTBlockTimerFrameList;
>     UINT32                                        GTBlockTimerFrameCount;
> +  UINTN                                         Length;
>   
>     ASSERT (Gtdt != NULL);
>     ASSERT (GTBlockInfo != NULL);
> @@ -376,11 +377,27 @@ AddGTBlockList (
>         return Status;
>       }
>   
> +    Length = sizeof (EFI_ACPI_6_3_GTDT_GT_BLOCK_STRUCTURE) +
> +               (sizeof (EFI_ACPI_6_3_GTDT_GT_BLOCK_TIMER_STRUCTURE) *
> +                GTBlockInfo->GTBlockTimerFrameCount);
> +
> +    // Check that the length of the GT block does not
> +    // exceed MAX_UINT16
> +    if (Length > MAX_UINT16) {
> +      Status = EFI_INVALID_PARAMETER;
> +      DEBUG ((
> +        DEBUG_ERROR,
> +        "ERROR: GTDT: Too many GT Frames. Count = %d. " \
> +        "Maximum supported GT Block size exceeded. " \
> +        "Status = %r\n",
> +        GTBlockInfo->GTBlockTimerFrameCount,
> +        Status
> +        ));
> +      return Status;
> +    }
> +
>       GTBlock->Type = EFI_ACPI_6_3_GTDT_GT_BLOCK;
> -    GTBlock->Length = sizeof (EFI_ACPI_6_3_GTDT_GT_BLOCK_STRUCTURE) +
> -                        (sizeof (EFI_ACPI_6_3_GTDT_GT_BLOCK_TIMER_STRUCTURE) *
> -                          GTBlockInfo->GTBlockTimerFrameCount);
> -
> +    GTBlock->Length = (UINT16)Length;
>       GTBlock->Reserved = EFI_ACPI_RESERVED_BYTE;
>       GTBlock->CntCtlBase = GTBlockInfo->GTBlockPhysicalAddress;
>       GTBlock->GTBlockTimerCount = GTBlockInfo->GTBlockTimerFrameCount;
> 

Reviewed-by: Philippe Mathieu-Daude <philmd at redhat.com>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#51088): https://edk2.groups.io/g/devel/message/51088
Mute This Topic: https://groups.io/mt/32999784/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list