From dcc064aa0fee8377938bc436c3e6d7ce647ef8cc Mon Sep 17 00:00:00 2001 From: slavendam Date: Sun, 11 Jan 2026 20:01:16 +0100 Subject: [PATCH] Fix subsecond calculation to prevent overflow Signed-off-by: slavendam --- src/rtc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rtc.c b/src/rtc.c index 3b57308..22dc997 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -928,7 +928,8 @@ void RTC_StartAlarm64(alarm_t name, uint8_t day, uint8_t hours, uint8_t minutes, */ if ((initMode == MODE_BINARY_ONLY) || (initMode == MODE_BINARY_MIX)) { /* the subsecond is the millisecond to be converted in a subsecond downcounter value */ - RTC_AlarmStructure.AlarmTime.SubSeconds = UINT32_MAX - ((uint32_t)subSeconds * (predivSync + 1)) / 1000; + uint64_t tmp = (subSeconds * (uint64_t)(predivSync + 1)) / (uint64_t)1000; + RTC_AlarmStructure.AlarmTime.SubSeconds = (uint32_t)UINT32_MAX - (uint32_t)tmp; } else { RTC_AlarmStructure.AlarmTime.SubSeconds = predivSync - ((uint32_t)subSeconds * (predivSync + 1)) / 1000; }