mirror of https://github.com/acidanthera/audk.git
CryptoPkg: Fix the potential system hang issue
This patch is used to fix the potential system hang caused by the NULL 'time' parameter usage. Cc: David Woodhouse <dwmw2@infradead.org> Cc: Long Qin <qin.long@intel.com> Cc: Ye Ting <ting.ye@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com> Reviewed-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
727894d5c9
commit
5e2318dd37
|
@ -2,7 +2,7 @@
|
|||
C Run-Time Libraries (CRT) Time Management Routines Wrapper Implementation
|
||||
for OpenSSL-based Cryptographic Library (used in DXE & RUNTIME).
|
||||
|
||||
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -73,6 +73,7 @@ UINTN CumulativeDays[2][14] = {
|
|||
time_t time (time_t *timer)
|
||||
{
|
||||
EFI_TIME Time;
|
||||
time_t CalTime;
|
||||
UINTN Year;
|
||||
|
||||
//
|
||||
|
@ -84,22 +85,26 @@ time_t time (time_t *timer)
|
|||
// Years Handling
|
||||
// UTime should now be set to 00:00:00 on Jan 1 of the current year.
|
||||
//
|
||||
for (Year = 1970, *timer = 0; Year != Time.Year; Year++) {
|
||||
*timer = *timer + (time_t)(CumulativeDays[IsLeap(Year)][13] * SECSPERDAY);
|
||||
for (Year = 1970, CalTime = 0; Year != Time.Year; Year++) {
|
||||
CalTime = CalTime + (time_t)(CumulativeDays[IsLeap(Year)][13] * SECSPERDAY);
|
||||
}
|
||||
|
||||
//
|
||||
// Add in number of seconds for current Month, Day, Hour, Minute, Seconds, and TimeZone adjustment
|
||||
//
|
||||
*timer = *timer +
|
||||
(time_t)((Time.TimeZone != EFI_UNSPECIFIED_TIMEZONE) ? (Time.TimeZone * 60) : 0) +
|
||||
(time_t)(CumulativeDays[IsLeap(Time.Year)][Time.Month] * SECSPERDAY) +
|
||||
(time_t)(((Time.Day > 0) ? Time.Day - 1 : 0) * SECSPERDAY) +
|
||||
(time_t)(Time.Hour * SECSPERHOUR) +
|
||||
(time_t)(Time.Minute * 60) +
|
||||
(time_t)Time.Second;
|
||||
CalTime = CalTime +
|
||||
(time_t)((Time.TimeZone != EFI_UNSPECIFIED_TIMEZONE) ? (Time.TimeZone * 60) : 0) +
|
||||
(time_t)(CumulativeDays[IsLeap(Time.Year)][Time.Month] * SECSPERDAY) +
|
||||
(time_t)(((Time.Day > 0) ? Time.Day - 1 : 0) * SECSPERDAY) +
|
||||
(time_t)(Time.Hour * SECSPERHOUR) +
|
||||
(time_t)(Time.Minute * 60) +
|
||||
(time_t)Time.Second;
|
||||
|
||||
return *timer;
|
||||
if (timer != NULL) {
|
||||
*timer = CalTime;
|
||||
}
|
||||
|
||||
return CalTime;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue