summaryrefslogtreecommitdiffstats
path: root/EmbeddedPkg
diff options
context:
space:
mode:
authorPete Batard <pete@akeo.ie>2020-10-08 11:08:21 +0100
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2020-10-22 13:23:48 +0000
commit24cf72726564eac7ba9abb24f3d05795164d0a70 (patch)
tree2eeaa2c1473a42e2ccec8a318b66a7a0283e1634 /EmbeddedPkg
parente3c7db50cac9125607df49d5873991df6df11eae (diff)
downloadedk2-24cf72726564eac7ba9abb24f3d05795164d0a70.tar.gz
edk2-24cf72726564eac7ba9abb24f3d05795164d0a70.tar.bz2
edk2-24cf72726564eac7ba9abb24f3d05795164d0a70.zip
EmbeddedPkg/VirtualRealTimeClockLib: Explicit cast to UINT32
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>
Diffstat (limited to 'EmbeddedPkg')
-rw-r--r--EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
index 74e72bd48b..5c13ed4cf1 100644
--- a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
+++ b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
@@ -202,14 +202,14 @@ LibGetTime (
// Because we use the performance counter, we can fill the Nanosecond attribute
// provided that the remainder doesn't overflow 64-bit during multiplication.
if (Remainder <= 18446744073U) {
- Time->Nanosecond = MultU64x64 (Remainder, 1000000000U) / Freq;
+ Time->Nanosecond = (UINT32)(MultU64x64 (Remainder, 1000000000U) / Freq);
} else {
DEBUG ((DEBUG_WARN, "LibGetTime: Nanosecond value not set (64-bit overflow).\n"));
}
if (Capabilities) {
Capabilities->Accuracy = 0;
- Capabilities->Resolution = Freq;
+ Capabilities->Resolution = 1;
Capabilities->SetsToZero = FALSE;
}