• J
    rtc_time_to_tm: fix signed/unsigned arithmetic · 73442daf
    Jan Altenberg 提交于
    commit 945185a6 ("rtc: rtc_time_to_tm: use
    unsigned arithmetic") changed the some types in rtc_time_to_tm() to
    unsigned:
    
     void rtc_time_to_tm(unsigned long time, struct rtc_time *tm)
     {
    -       register int days, month, year;
    +       unsigned int days, month, year;
    
    This doesn't work for all cases, because days is checked for < 0 later
    on:
    
    if (days < 0) {
    	year -= 1;
    	days += 365 + LEAP_YEAR(year);
    }
    
    I think the correct fix would be to keep days signed and do an appropriate
    cast later on.
    Signed-off-by: NJan Altenberg <jan.altenberg@linutronix.de>
    Cc: Maciej W. Rozycki <macro@linux-mips.org>
    Cc: Alessandro Zummo <a.zummo@towertech.it>
    Cc: David Brownell <david-b@pacbell.net>
    Cc: Dmitri Vorobiev <dmitri.vorobiev@gmail.com>
    Cc: <stable@kernel.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    73442daf
rtc-lib.c 2.9 KB