All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Mateusz Jończyk" <mat.jonczyk@o2.pl>
To: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: "Mateusz Jończyk" <mat.jonczyk@o2.pl>,
	"Nobuhiro Iwamatsu" <iwamatsu@nigauri.org>,
	"Alessandro Zummo" <a.zummo@towertech.it>,
	"Alexandre Belloni" <alexandre.belloni@bootlin.com>,
	stable@vger.kernel.org
Subject: [PATCH v4 1/9] rtc-cmos: take rtc_lock while reading from CMOS
Date: Fri, 10 Dec 2021 21:01:23 +0100	[thread overview]
Message-ID: <20211210200131.153887-2-mat.jonczyk@o2.pl> (raw)
In-Reply-To: <20211210200131.153887-1-mat.jonczyk@o2.pl>

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

---

 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 4eb53412b808..dc3f8b0dde98 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -457,7 +457,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


  reply	other threads:[~2021-12-10 20:02 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-10 20:01 [PATCH v4 0/9] rtc-cmos,rtc-mc146818-lib: fixes Mateusz Jończyk
2021-12-10 20:01 ` Mateusz Jończyk [this message]
2021-12-10 20:01 ` [PATCH v4 2/9] rtc: change return values of mc146818_get_time() Mateusz Jończyk
2021-12-10 20:01 ` [PATCH v4 3/9] Check return value from mc146818_get_time() Mateusz Jończyk
2021-12-10 20:01   ` Mateusz Jończyk
2021-12-10 20:01 ` [PATCH v4 4/9] rtc-mc146818-lib: fix RTC presence check Mateusz Jończyk
2021-12-10 20:01 ` [PATCH v4 5/9] rtc-mc146818-lib: extract mc146818_avoid_UIP Mateusz Jończyk
2021-12-10 20:01 ` [PATCH v4 6/9] rtc-mc146818-lib: refactor mc146818_get_time Mateusz Jończyk
2021-12-10 20:01 ` [PATCH v4 7/9] rtc-mc146818-lib: refactor mc146818_does_rtc_work Mateusz Jończyk
2021-12-10 20:01 ` [PATCH v4 8/9] rtc-cmos: avoid UIP when reading alarm time Mateusz Jończyk
2021-12-10 20:03   ` [DEBUG PATCH v4] rtc-cmos: cmos_read_alarm bug demonstration Mateusz Jończyk
2021-12-10 20:01 ` [PATCH v4 9/9] rtc-cmos: avoid UIP when writing alarm time Mateusz Jończyk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211210200131.153887-2-mat.jonczyk@o2.pl \
    --to=mat.jonczyk@o2.pl \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@bootlin.com \
    --cc=iwamatsu@nigauri.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.