Hi,

You should probably copy the x86 maintainers as part of that patch
touches code for that architecture.

On 04/10/2016 at 11:04:38 -0700, Andrew Kim wrote :
> 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 <andrew....@intel.com>
> ---
>  arch/x86/kernel/rtc.c          | 7 +++++--
>  drivers/rtc/rtc-mc146818-lib.c | 7 +++++--
>  include/linux/mc146818rtc.h    | 2 ++
>  3 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/kernel/rtc.c b/arch/x86/kernel/rtc.c
> index 79c6311c..feac180 100644
> --- a/arch/x86/kernel/rtc.c
> +++ b/arch/x86/kernel/rtc.c
> @@ -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)
> -             century = CMOS_READ(acpi_gbl_FADT.century);
> +         acpi_gbl_FADT.century) {
> +             if ((century = CMOS_READ(acpi_gbl_FADT.century)) >


checkpatch complains about using an assignment in an if() which I find
justifiable. Can you change that?


> +                     RTC_CENTURY_LIMIT)
> +                     century = 0;
> +     }
>  #endif
>  
>       status = CMOS_READ(RTC_CONTROL);
> diff --git a/drivers/rtc/rtc-mc146818-lib.c b/drivers/rtc/rtc-mc146818-lib.c
> index 2f1772a..1d83c2c 100644
> --- a/drivers/rtc/rtc-mc146818-lib.c
> +++ b/drivers/rtc/rtc-mc146818-lib.c
> @@ -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)
> -             century = CMOS_READ(acpi_gbl_FADT.century);
> +         acpi_gbl_FADT.century) {
> +             if ((century = CMOS_READ(acpi_gbl_FADT.century)) >
> +                     RTC_CENTURY_LIMIT)
> +                     century = 0;
> +     }
>  #endif
>       ctrl = CMOS_READ(RTC_CONTROL);
>       spin_unlock_irqrestore(&rtc_lock, flags);
> diff --git a/include/linux/mc146818rtc.h b/include/linux/mc146818rtc.h
> index a585b4b..199065a 100644
> --- a/include/linux/mc146818rtc.h
> +++ b/include/linux/mc146818rtc.h
> @@ -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);
>  
> -- 
> 1.9.1
> 

-- 
Alexandre Belloni, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

Reply via email to