]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blobdiff - queue-4.4/rtc-cmos-take-rtc_lock-while-reading-from-cmos.patch
Linux 4.4.300
[thirdparty/kernel/stable-queue.git] / queue-4.4 / rtc-cmos-take-rtc_lock-while-reading-from-cmos.patch
diff --git a/queue-4.4/rtc-cmos-take-rtc_lock-while-reading-from-cmos.patch b/queue-4.4/rtc-cmos-take-rtc_lock-while-reading-from-cmos.patch
deleted file mode 100644 (file)
index 0f0d4ee..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-From 454f47ff464325223129b9b5b8d0b61946ec704d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Mateusz=20Jo=C5=84czyk?= <mat.jonczyk@o2.pl>
-Date: Fri, 10 Dec 2021 21:01:23 +0100
-Subject: rtc: cmos: take rtc_lock while reading from CMOS
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-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
-@@ -343,7 +343,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;