From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
patches@lists.linux.dev,
"Alexandre Mergnat" <amergnat@baylibre.com>,
"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>,
"Alexandre Belloni" <alexandre.belloni@bootlin.com>
Subject: [PATCH 6.15 12/34] rtc: Make rtc_time64_to_tm() support dates before 1970
Date: Sat, 7 Jun 2025 12:07:53 +0200 [thread overview]
Message-ID: <20250607100720.203256332@linuxfoundation.org> (raw)
In-Reply-To: <20250607100719.711372213@linuxfoundation.org>
6.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Mergnat <amergnat@baylibre.com>
commit 7df4cfef8b351fec3156160bedfc7d6d29de4cce upstream.
Conversion of dates before 1970 is still relevant today because these
dates are reused on some hardwares to store dates bigger than the
maximal date that is representable in the device's native format.
This prominently and very soon affects the hardware covered by the
rtc-mt6397 driver that can only natively store dates in the interval
1900-01-01 up to 2027-12-31. So to store the date 2028-01-01 00:00:00
to such a device, rtc_time64_to_tm() must do the right thing for
time=-2208988800.
Signed-off-by: Alexandre Mergnat <amergnat@baylibre.com>
Reviewed-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/20250428-enable-rtc-v4-1-2b2f7e3f9349@baylibre.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/rtc/lib.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
--- a/drivers/rtc/lib.c
+++ b/drivers/rtc/lib.c
@@ -46,24 +46,38 @@ EXPORT_SYMBOL(rtc_year_days);
* rtc_time64_to_tm - converts time64_t to rtc_time.
*
* @time: The number of seconds since 01-01-1970 00:00:00.
- * (Must be positive.)
+ * Works for values since at least 1900
* @tm: Pointer to the struct rtc_time.
*/
void rtc_time64_to_tm(time64_t time, struct rtc_time *tm)
{
- unsigned int secs;
- int days;
+ int days, secs;
u64 u64tmp;
u32 u32tmp, udays, century, day_of_century, year_of_century, year,
day_of_year, month, day;
bool is_Jan_or_Feb, is_leap_year;
- /* time must be positive */
+ /*
+ * Get days and seconds while preserving the sign to
+ * handle negative time values (dates before 1970-01-01)
+ */
days = div_s64_rem(time, 86400, &secs);
+ /*
+ * We need 0 <= secs < 86400 which isn't given for negative
+ * values of time. Fixup accordingly.
+ */
+ if (secs < 0) {
+ days -= 1;
+ secs += 86400;
+ }
+
/* day of the week, 1970-01-01 was a Thursday */
tm->tm_wday = (days + 4) % 7;
+ /* Ensure tm_wday is always positive */
+ if (tm->tm_wday < 0)
+ tm->tm_wday += 7;
/*
* The following algorithm is, basically, Proposition 6.3 of Neri
@@ -93,7 +107,7 @@ void rtc_time64_to_tm(time64_t time, str
* thus, is slightly different from [1].
*/
- udays = ((u32) days) + 719468;
+ udays = days + 719468;
u32tmp = 4 * udays + 3;
century = u32tmp / 146097;
next prev parent reply other threads:[~2025-06-07 10:10 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-07 10:07 [PATCH 6.15 00/34] 6.15.2-rc1 review Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 01/34] tracing: Fix compilation warning on arm32 Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 02/34] Revert "x86/smp: Eliminate mwait_play_dead_cpuid_hint()" Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 03/34] ACPICA: Introduce ACPI_NONSTRING Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 04/34] ACPICA: Apply ACPI_NONSTRING Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 05/34] ACPICA: Apply ACPI_NONSTRING in more places Greg Kroah-Hartman
2025-06-12 5:31 ` Collin Funk
2025-06-12 7:23 ` Jiri Slaby
2025-06-12 8:15 ` Ahmed Salem
2025-06-13 2:17 ` Collin Funk
2025-06-13 2:12 ` Collin Funk
2025-06-07 10:07 ` [PATCH 6.15 06/34] pinctrl: armada-37xx: use correct OUTPUT_VAL register for GPIOs > 31 Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 07/34] pinctrl: armada-37xx: set GPIO output value before setting direction Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 08/34] clk: samsung: correct clock summary for hsi1 block Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 09/34] acpi-cpufreq: Fix nominal_freq units to KHz in get_max_boost_ratio() Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 10/34] Documentation: ACPI: Use all-string data node references Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 11/34] pinctrl: mediatek: eint: Fix invalid pointer dereference for v1 platforms Greg Kroah-Hartman
2025-06-07 10:07 ` Greg Kroah-Hartman [this message]
2025-06-07 10:07 ` [PATCH 6.15 13/34] rtc: Fix offset calculation for .start_secs < 0 Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 14/34] bcachefs: Kill un-reverted directory i_size code Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 15/34] bcachefs: Repair code for directory i_size Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 16/34] bcachefs: delete dead code from may_delete_deleted_inode() Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 17/34] bcachefs: Run may_delete_deleted_inode() checks in bch2_inode_rm() Greg Kroah-Hartman
2025-06-07 10:07 ` [PATCH 6.15 18/34] bcachefs: Fix subvol to missing root repair Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 19/34] usb: quirks: Add NO_LPM quirk for SanDisk Extreme 55AE Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 20/34] usb: storage: Ignore UAS driver for SanDisk 3.2 Gen2 storage device Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 21/34] USB: serial: pl2303: add new chip PL2303GC-Q20 and PL2303GT-2AB Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 22/34] usb: typec: ucsi: fix Clang -Wsign-conversion warning Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 23/34] Bluetooth: hci_qca: move the SoC type check to the right place Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 24/34] serial: jsm: fix NPE during jsm_uart_port_init Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 25/34] nvmem: rmem: select CONFIG_CRC32 Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 26/34] usb: usbtmc: Fix timeout value in get_stb Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 27/34] binder: fix use-after-free in binderfs_evict_inode() Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 28/34] binder: fix yet another UAF in binder_devices Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 29/34] thunderbolt: Do not double dequeue a configuration request Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 30/34] dt-bindings: pwm: adi,axi-pwmgen: Fix clocks Greg Kroah-Hartman
2025-06-10 14:12 ` David Lechner
2025-06-07 10:08 ` [PATCH 6.15 31/34] dt-bindings: remoteproc: qcom,sm8150-pas: Add missing SC8180X compatible Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 32/34] dt-bindings: usb: cypress,hx3: Add support for all variants Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 33/34] dt-bindings: phy: imx8mq-usb: fix fsl,phy-tx-vboost-level-microvolt property Greg Kroah-Hartman
2025-06-07 10:08 ` [PATCH 6.15 34/34] Revert "drm/amd/display: more liberal vmin/vmax update for freesync" Greg Kroah-Hartman
2025-06-07 11:42 ` [PATCH 6.15 00/34] 6.15.2-rc1 review Christian Heusel
2025-06-07 11:50 ` Ronald Warsow
2025-06-08 5:26 ` Luna Jernberg
2025-06-07 20:19 ` Florian Fainelli
2025-06-08 5:13 ` Takeshi Ogasawara
2025-06-08 5:38 ` Ron Economos
2025-06-08 6:53 ` Naresh Kamboju
2025-06-08 17:40 ` Peter Schneider
2025-06-08 22:31 ` Mark Brown
2025-06-09 12:48 ` Jon Hunter
2025-06-12 20:30 ` Miguel Ojeda
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=20250607100720.203256332@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=alexandre.belloni@bootlin.com \
--cc=amergnat@baylibre.com \
--cc=patches@lists.linux.dev \
--cc=stable@vger.kernel.org \
--cc=u.kleine-koenig@baylibre.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).