rtc: add century field data boundary
Subsystems (2)
PATCH 1/1 rtc: add century field data boundary
According to ACPI specification, the century field data should be ranged 0-63. so if it's over this range, it could cause system RTC settings error including alarmwakeup settings. So it's required to have this boundary for safe RTC init settings.
Signed-off-by Andrew Kim <[email protected]>
--- arch/x86/kernel/rtc.c | 5 ++++- drivers/rtc/rtc-mc146818-lib.c | 5 ++++- include/linux/mc146818rtc.h | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-)
arch/x86/kernel/rtc.c +4 -1
@@ -84,8 +84,11 @@ void mach_get_cmos_time(struct timespec *now)#ifdef CONFIG_ACPI if (acpi_gbl_FADT.header.revision >=FADT2_REVISION_ID && - acpi_gbl_FADT.century) + acpi_gbl_FADT.century) { century =CMOS_READ (acpi_gbl_FADT.century); +if (century >RTC_CENTURY_LIMIT ) + century =0 ; + }#endif status =CMOS_READ (RTC_CONTROL );
drivers/rtc/rtc-mc146818-lib.c +4 -1
@@ -61,8 +61,11 @@ unsigned int mc146818_get_time(struct rtc_time *time)#endif #ifdef CONFIG_ACPI if (acpi_gbl_FADT.header.revision >=FADT2_REVISION_ID && - acpi_gbl_FADT.century) + acpi_gbl_FADT.century) { century =CMOS_READ (acpi_gbl_FADT.century); +if (century >RTC_CENTURY_LIMIT ) + century =0 ; + }#endif ctrl =CMOS_READ (RTC_CONTROL );spin_unlock_irqrestore (&rtc_lock, flags);
include/linux/mc146818rtc.h +2 -0
@@ -122,6 +122,8 @@ struct cmos_rtc_board_info {#define RTC_IO_EXTENT_USED RTC_IO_EXTENT#endif /* ARCH_RTC_LOCATION */ +#define RTC_CENTURY_LIMIT 0x3F +unsigned int mc146818_get_time (struct rtc_time *time);int mc146818_set_time (struct rtc_time *time);
Signature · 1 line
1.9.1