mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-01 16:43:28 +08:00
efi_loader: check time in SetTime()
The UEFI spec prescribes that we check that the timestamp passed to SetTime() is checked for validity. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
3c1889e639
commit
e6bcc35452
@ -214,6 +214,30 @@ out:
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DM_RTC
|
||||
|
||||
/**
|
||||
* efi_validate_time() - checks if timestamp is valid
|
||||
*
|
||||
* @time: timestamp to validate
|
||||
* Returns: 0 if timestamp is valid, 1 otherwise
|
||||
*/
|
||||
static int efi_validate_time(struct efi_time *time)
|
||||
{
|
||||
return (!time ||
|
||||
time->year < 1900 || time->year > 9999 ||
|
||||
!time->month || time->month > 12 || !time->day ||
|
||||
time->day > rtc_month_days(time->month - 1, time->year) ||
|
||||
time->hour > 23 || time->minute > 59 || time->second > 59 ||
|
||||
time->nanosecond > 999999999 ||
|
||||
time->daylight &
|
||||
~(EFI_TIME_IN_DAYLIGHT | EFI_TIME_ADJUST_DAYLIGHT) ||
|
||||
((time->timezone < -1440 || time->timezone > 1440) &&
|
||||
time->timezone != EFI_UNSPECIFIED_TIMEZONE));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* efi_set_time_boottime() - set current time
|
||||
*
|
||||
@ -235,7 +259,7 @@ static efi_status_t EFIAPI efi_set_time_boottime(struct efi_time *time)
|
||||
|
||||
EFI_ENTRY("%p", time);
|
||||
|
||||
if (!time) {
|
||||
if (efi_validate_time(time)) {
|
||||
ret = EFI_INVALID_PARAMETER;
|
||||
goto out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user