RTC class, error checks
PATCH 1/1 RTC class, error checks
The rtc_is_valid_tm() routine needs to treat some of the fields it checks as unsigned, to prevent wrongly accepting invalid rtc_time structs; this is the same approach used elsewhere in the RTC code for such tests.
Similarly, rtc_proc_show() is missing one invalid-day-of-month test that rtc_is_valid_tm() makes: there is no day zero.
Signed-off-by David Brownell <[email protected]>
drivers/rtc/rtc-lib.c +4 -4
@@ -75,12 +75,12 @@ EXPORT_SYMBOL(rtc_time_to_tm);int rtc_valid_tm (struct rtc_time *tm) {if (tm->tm_year <70 - || tm->tm_mon >=12 + || ((unsigned )tm->tm_mon) >=12 || tm->tm_mday <1 || tm->tm_mday >rtc_month_days (tm->tm_mon, tm->tm_year +1900 ) - || tm->tm_hour >=24 - || tm->tm_min >=60 - || tm->tm_sec >=60 ) + || ((unsigned )tm->tm_hour) >=24 + || ((unsigned )tm->tm_min) >=60 + || ((unsigned )tm->tm_sec) >=60 )return -EINVAL ;return 0 ;
drivers/rtc/rtc-proc.c +1 -1
@@ -61,7 +61,7 @@ static int rtc_proc_show(struct seq_fileseq_printf (seq,"%02d-" , alrm.time.tm_mon +1 ); else seq_printf(seq, "**-"); -if ((unsigned int )alrm.time.tm_mday <=31 ) +if (alrm.time.tm_mday && (unsigned int )alrm.time.tm_mday <=31 )seq_printf (seq,"%02d\n" , alrm.time.tm_mday);else seq_printf (seq,"**\n" );