[edk2-devel] [PATCH v1 17/19] ArmPlatformPkg: Fix UART divisor warning

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


On 8/23/19 12:55 PM, Sami Mujawar wrote:
> The VS2017 compiler reports 'warning C4244: '=': conversion
> from 'UINT64' to 'UINT32', possible loss of data' for the
> calculation of the UART Divisor value.
> 
> Fix this warning by adding appropriate typecast and a validation
> that ensures that the UART divisor value generated does not exceed
> MAX_UINT32.
> 
> Signed-off-by: Sami Mujawar <sami.mujawar at arm.com>
> ---
>   ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c | 10 ++++++++--
>   1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c b/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c
> index 801990d9551a638c17d560d4226137b8a3ee47bb..2d3c279cce49304959953ec4a34b50e09a7d0045 100644
> --- a/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c
> +++ b/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c
> @@ -2,7 +2,7 @@
>     Serial I/O Port library functions with no library constructor/destructor
>   
>     Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
> -  Copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR>
> +  Copyright (c) 2011 - 2019, ARM Ltd. All rights reserved.<BR>
>   
>     SPDX-License-Identifier: BSD-2-Clause-Patent
>   
> @@ -78,6 +78,7 @@ PL011UartInitializePort (
>     UINT32      Integer;
>     UINT32      Fractional;
>     UINT32      HardwareFifoDepth;
> +  UINT64      DivisorValue;
>   
>     HardwareFifoDepth = (PL011_UARTPID2_VER (MmioRead32 (UartBase + UARTPID2)) \
>                          > PL011_VER_R1P4) \
> @@ -188,7 +189,12 @@ PL011UartInitializePort (
>         return RETURN_INVALID_PARAMETER;
>       }
>   
> -    Divisor = (UartClkInHz * 4) / *BaudRate;
> +    DivisorValue = (((UINT64)UartClkInHz * 4) / *BaudRate);
> +    if (DivisorValue > MAX_UINT32) {
> +      return RETURN_INVALID_PARAMETER;
> +    }
> +
> +    Divisor = (UINT32)DivisorValue;
>       Integer = Divisor >> FRACTION_PART_SIZE_IN_BITS;
>       Fractional = Divisor & FRACTION_PART_MASK;
>     }
> 

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


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

View/Reply Online (#51067): https://edk2.groups.io/g/devel/message/51067
Mute This Topic: https://groups.io/mt/32999802/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