From cc104d19a94f5aac71559b197a7166d37f484099 Mon Sep 17 00:00:00 2001 From: Olivier Martin Date: Mon, 21 Oct 2013 11:12:21 +0000 Subject: ArmPlatformPkg/PL031RealTimeClockLib: Fixed the conditions in LibSetTime() Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14794 6f19259b-4bc3-4df7-8a09-765794883524 --- .../PL031RealTimeClockLib/PL031RealTimeClockLib.c | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'ArmPlatformPkg') diff --git a/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c b/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c index b7dba087fc..980f809b2c 100644 --- a/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c +++ b/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c @@ -181,7 +181,7 @@ EfiTimeToEpoch ( JulianDate = Time->Day + ((153*m + 2)/5) + (365*y) + (y/4) - (y/100) + (y/400) - 32045; - ASSERT(JulianDate > EPOCH_JULIAN_DATE); + ASSERT (JulianDate >= EPOCH_JULIAN_DATE); EpochDays = JulianDate - EPOCH_JULIAN_DATE; EpochSeconds = (EpochDays * SEC_PER_DAY) + ((UINTN)Time->Hour * SEC_PER_HOUR) + (Time->Minute * SEC_PER_MIN) + Time->Second; @@ -420,16 +420,9 @@ LibSetTime ( EFI_STATUS Status; UINTN EpochSeconds; - // Because the PL031 is a 32-bit counter counting seconds, - // the maximum time span is just over 136 years. - // Time is stored in Unix Epoch format, so it starts in 1970, - // Therefore it can not exceed the year 2106. - // This is not a problem for UEFI, as the current spec limits the years - // to the range 1998 .. 2011 - - // Check the input parameters' range. - if ((Time->Year < 1998) || - (Time->Year > 2099) || + // Check the input parameters are within the range specified by UEFI + if ((Time->Year < 1900) || + (Time->Year > 9999) || (Time->Month < 1 ) || (Time->Month > 12 ) || (!DayValid (Time) ) || @@ -444,6 +437,15 @@ LibSetTime ( goto EXIT; } + // Because the PL031 is a 32-bit counter counting seconds, + // the maximum time span is just over 136 years. + // Time is stored in Unix Epoch format, so it starts in 1970, + // Therefore it can not exceed the year 2106. + if ((Time->Year < 1970) || (Time->Year >= 2106)) { + Status = EFI_UNSUPPORTED; + goto EXIT; + } + // Initialize the hardware if not already done if (!mPL031Initialized) { Status = InitializePL031 (); -- cgit v1.2.3