[edk2-devel] [PATCH v1-resend 1/2] ArmPlatformPkg: Fix UART divisor warning

Sami Mujawar posted 2 patches 5 years, 8 months ago
[edk2-devel] [PATCH v1-resend 1/2] ArmPlatformPkg: Fix UART divisor warning
Posted by Sami Mujawar 5 years, 8 months ago
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@arm.com>
Reviewed-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com>
---

Notes:
    v1:
     - Fix UART divisor warning reported by VS2017                [SAMI]
     - Resending patch as part of separate series                 [SAMI]
       Ref: https://edk2.groups.io/g/devel/message/46279

 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;
   }
-- 
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'


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

View/Reply Online (#59739): https://edk2.groups.io/g/devel/message/59739
Mute This Topic: https://groups.io/mt/74289924/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH v1-resend 1/2] ArmPlatformPkg: Fix UART divisor warning
Posted by Sami Mujawar 5 years, 7 months ago
Hi Ard, Leif,

I probably have got the 'v1-resend' in subject line wrong. Basically this patch has not changed since the v1 posting.
This was last submitted as part of the v3 series which can be seen at https://edk2.groups.io/g/devel/message/59738?p=,,,20,0,0,0::Created,,ArmPlatformPkg%3A+Fix+UART+divisor+warning,20,2,0,74289923

The other patch 2/2 in this series is at https://edk2.groups.io/g/devel/topic/74377676

Kindly let me know if you want me to repost the series or if any other change is needed.

Regards,

Sami Mujawar

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

View/Reply Online (#61977): https://edk2.groups.io/g/devel/message/61977
Mute This Topic: https://groups.io/mt/74289924/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-