Linux RTC
 help / color / mirror / Atom feed
* [PATCH] rtc: ftrtc010: fix cast
@ 2026-10-05 11:06 alexandre.belloni
  2026-10-05 11:11 ` sashiko-bot
  0 siblings, 1 reply; 2+ messages in thread
From: alexandre.belloni @ 2026-10-05 11:06 UTC (permalink / raw)
  To: Hans Ulli Kroll, Linus Walleij, Alexandre Belloni
  Cc: Dan Carpenter, linux-arm-kernel, linux-rtc, linux-kernel

From: Alexandre Belloni <alexandre.belloni@bootlin.com>

The hour and minute registers will rollover before the multiplication to
convert to a number of seconds can exceed an 32bit integer, there is no
need to cast them.

Reported-by: Dan Carpenter <error27@gmail.com>
Link: https://patch.msgid.link/20261002105946.8rdteIpO7uWGEcTlS65F8iSi4gsRoXi2kgq8FTSaDPA@z/
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
---
 drivers/rtc/rtc-ftrtc010.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/rtc/rtc-ftrtc010.c b/drivers/rtc/rtc-ftrtc010.c
index b29c96be40f4..5332451bdaa0 100644
--- a/drivers/rtc/rtc-ftrtc010.c
+++ b/drivers/rtc/rtc-ftrtc010.c
@@ -72,7 +72,7 @@ static int ftrtc010_rtc_read_time(struct device *dev, struct rtc_time *tm)
 	days = readl(rtc->rtc_base + FTRTC010_RTC_DAYS);
 	offset = readl(rtc->rtc_base + FTRTC010_RTC_RECORD);
 
-	time = (timeu64_t)(offset + days * 86400 + hour * 3600 + min * 60 + sec);
+	time = offset + (timeu64_t)days * 86400 + hour * 3600 + min * 60 + sec;
 
 	rtc_time64_to_tm(time, tm);
 
@@ -92,8 +92,7 @@ static int ftrtc010_rtc_set_time(struct device *dev, struct rtc_time *tm)
 	hour = readl(rtc->rtc_base + FTRTC010_RTC_HOUR);
 	day = readl(rtc->rtc_base + FTRTC010_RTC_DAYS);
 
-	offset = time - ((timeu64_t)day * 86400 + (timeu64_t)hour * 3600 +
-			 (timeu64_t)min * 60 + (timeu64_t)sec);
+	offset = time - (timeu64_t)day * 86400 + hour * 3600 + min * 60 + sec;
 
 	writel(offset, rtc->rtc_base + FTRTC010_RTC_RECORD);
 	writel(0x01, rtc->rtc_base + FTRTC010_RTC_CR);
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] rtc: ftrtc010: fix cast
  2026-10-05 11:06 [PATCH] rtc: ftrtc010: fix cast alexandre.belloni
@ 2026-10-05 11:11 ` sashiko-bot
  0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-10-05 11:11 UTC (permalink / raw)
  To: alexandre.belloni; +Cc: Alexandre Belloni, linux-rtc

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] rtc: ftrtc010: broken operator precedence in offset calculation
--

commit d205fb0cae60ed15e7685f77950862e58120dd5a
Author: Alexandre Belloni <alexandre.belloni@bootlin.com>

rtc: ftrtc010: fix cast

This commit removes unnecessary casts to timeu64_t from the hour, min, and sec
registers during the calculation of time and offset, as they will rollover
before exceeding a 32-bit integer.

Link: https://patch.msgid.link/20261002105946.8rdteIpO7uWGEcTlS65F8iSi4gsRoXi2kgq8FTSaDPA@z/

> diff --git a/drivers/rtc/rtc-ftrtc010.c b/drivers/rtc/rtc-ftrtc010.c
> index b29c96be40f4a..5332451bdaa05 100644
> --- a/drivers/rtc/rtc-ftrtc010.c
> +++ b/drivers/rtc/rtc-ftrtc010.c

[ ... ]

> @@ -92,8 +92,7 @@ static int ftrtc010_rtc_set_time(struct device *dev, struct rtc_time *tm)
>  	hour = readl(rtc->rtc_base + FTRTC010_RTC_HOUR);
>  	day = readl(rtc->rtc_base + FTRTC010_RTC_DAYS);
>  
> -	offset = time - ((timeu64_t)day * 86400 + (timeu64_t)hour * 3600 +
> -			 (timeu64_t)min * 60 + (timeu64_t)sec);
> +	offset = time - (timeu64_t)day * 86400 + hour * 3600 + min * 60 + sec;

[Severity: High]
Could this change introduce an operator precedence issue?

Because the grouping parentheses around the time components were removed,
the expression evaluates strictly from left to right. This subtracts only
the days from the system time, and erroneously adds the hour, min, and sec
components instead of subtracting them.

When user-space programs or system time synchronizations invoke
ftrtc010_rtc_set_time(), this will predictably corrupt the stored hardware
time offset written to the FTRTC010_RTC_RECORD register.

>  
>  	writel(offset, rtc->rtc_base + FTRTC010_RTC_RECORD);
>  	writel(0x01, rtc->rtc_base + FTRTC010_RTC_CR);

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261005110638.156559-1-alexandre.belloni@bootlin.com?part=1

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-05 11:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-05 11:06 [PATCH] rtc: ftrtc010: fix cast alexandre.belloni
2026-10-05 11:11 ` sashiko-bot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox