]> git.proxmox.com Git - mirror_edk2.git/commitdiff
EmbeddedPkg/VirtualRealTimeClockLib: Explicit cast to UINT32
authorPete Batard <pete@akeo.ie>
Thu, 8 Oct 2020 10:08:21 +0000 (11:08 +0100)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Thu, 22 Oct 2020 13:23:48 +0000 (13:23 +0000)
Addresses BZ https://bugzilla.tianocore.org/show_bug.cgi?id=2380 where
explicit casts are required for 64 to 32 bit assignment.

We can apply a straight cast for Time->Nanosecond since we already checked
for overflow.

On the other hand, we may have a frequency that is greater than UINT32_MAX
for Capabilities->Resolution. But using the frequency for the resolution
is the wrong approach anyway, since we can't actually vouch for the actual
resolution of the virtual library. Instead, play it safe by defaulting to
1 Hz, which is what a standard PC-AT CMOS RTC device would use.

Signed-off-by: Pete Batard <pete@akeo.ie>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c

index 74e72bd48b4c773dc85ad219b158960754a35f3b..5c13ed4cf190327b6eb3d2912fb5e8cabcbb6a27 100644 (file)
@@ -202,14 +202,14 @@ LibGetTime (
   // Because we use the performance counter, we can fill the Nanosecond attribute\r
   // provided that the remainder doesn't overflow 64-bit during multiplication.\r
   if (Remainder <= 18446744073U) {\r
-    Time->Nanosecond = MultU64x64 (Remainder, 1000000000U) / Freq;\r
+    Time->Nanosecond = (UINT32)(MultU64x64 (Remainder, 1000000000U) / Freq);\r
   } else {\r
     DEBUG ((DEBUG_WARN, "LibGetTime: Nanosecond value not set (64-bit overflow).\n"));\r
   }\r
 \r
   if (Capabilities) {\r
     Capabilities->Accuracy   = 0;\r
-    Capabilities->Resolution = Freq;\r
+    Capabilities->Resolution = 1;\r
     Capabilities->SetsToZero = FALSE;\r
   }\r
 \r