lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sun, 17 Oct 2021 21:39:22 +0200 From: Mateusz Jończyk <mat.jonczyk@...pl> To: linux-kernel@...r.kernel.org, linux-rtc@...r.kernel.org Cc: Mateusz Jończyk <mat.jonczyk@...pl>, Nobuhiro Iwamatsu <iwamatsu@...auri.org>, Alessandro Zummo <a.zummo@...ertech.it>, Alexandre Belloni <alexandre.belloni@...tlin.com>, stable@...r.kernel.org Subject: [PATCH RESEND 1/6] rtc-cmos: take rtc_lock while reading from CMOS 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 the 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@...pl> Reviewed-by: Nobuhiro Iwamatsu <iwamatsu@...auri.org> Cc: Alessandro Zummo <a.zummo@...ertech.it> Cc: Alexandre Belloni <alexandre.belloni@...tlin.com> Cc: stable@...r.kernel.org --- drivers/rtc/rtc-cmos.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index 670fd8a2970e..2cd0fe728ab2 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -463,7 +463,10 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t) 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; -- 2.25.1
Powered by blists - more mailing lists