@samitouri / QOSamiQemu / commits / ae84c738e4

system/rtc: Fix a possible year-2038 integer overflow problem

rtc_realtime_clock_offset is initialized with: rtc_realtime_clock_offset = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000; And QEMU_CLOCK_REALTIME might be based on gettimeofday() in certain cases (see get_clock_realtime() in include/qemu/timer.h). So this counter will exceed 32 bits in the year 2038, thus we should not store this value in a normal integer variable. Change it to a time_t to fix the problem. And while we're at it, also adjust the nearby rtc_host_datetime_offset variable to be on the safe side in the related code. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Reviewed-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>

Thomas Huth committed May 18, 2026 at 18:34 UTC ae84c738e40339cc0f22773dd4692de529d88739
1 file changed +2 -2
system/rtc.c
+2 -2
@@ -41,8 +41,8 @@ static enum {
41 RTC_BASE_DATETIME,
42 } rtc_base_type = RTC_BASE_UTC;
43 static time_t rtc_ref_start_datetime;
44 -static int rtc_realtime_clock_offset; /* used only with QEMU_CLOCK_REALTIME */
45 -static int rtc_host_datetime_offset = -1; /* valid & used only with
44 +static time_t rtc_realtime_clock_offset; /* used only with QEMU_CLOCK_REALTIME */
45 +static time_t rtc_host_datetime_offset = -1; /* valid & used only with
46 RTC_BASE_DATETIME */
47 QEMUClockType rtc_clock;
48 /***********************************************************/