lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 013/320] rtc: cmos: take rtc_lock while reading from CMOS
    Date
    From: Mateusz Jończyk <mat.jonczyk@o2.pl>

    commit 454f47ff464325223129b9b5b8d0b61946ec704d upstream.

    Reading from the CMOS involves writing to the index register and then
    reading from the data register. Therefore access to the CMOS has to be
    serialized with rtc_lock. This invocation of CMOS_READ was not
    serialized, which could cause trouble when other code is accessing CMOS
    at the same time.

    Use spin_lock_irq() like the rest of the function.

    Nothing in kernel modifies the RTC_DM_BINARY bit, so there could be a
    separate pair of spin_lock_irq() / spin_unlock_irq() before doing the
    math.

    Signed-off-by: Mateusz Jończyk <mat.jonczyk@o2.pl>
    Reviewed-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
    Cc: Alessandro Zummo <a.zummo@towertech.it>
    Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Link: https://lore.kernel.org/r/20211210200131.153887-2-mat.jonczyk@o2.pl
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/rtc/rtc-cmos.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/drivers/rtc/rtc-cmos.c
    +++ b/drivers/rtc/rtc-cmos.c
    @@ -463,7 +463,10 @@ static int cmos_set_alarm(struct device
    min = t->time.tm_min;
    sec = t->time.tm_sec;

    + spin_lock_irq(&rtc_lock);
    rtc_control = CMOS_READ(RTC_CONTROL);
    + spin_unlock_irq(&rtc_lock);
    +
    if (!(rtc_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) {
    /* Writing 0xff means "don't care" or "match all". */
    mon = (mon <= 12) ? bin2bcd(mon) : 0xff;

    \
     
     \ /
      Last update: 2022-01-24 21:40    [W:4.059 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site