[PULL 3/8] system/rtc: Fix a possible year-2038 integer overflow problem
Michael Tokarev <[email protected]> Fri, 12 Jun 2026 19:59:47 +0300
| Newsgroups | org.nongnu.qemu-trivial,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
From: Thomas Huth <[email protected]> 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 <[email protected]> Reviewed-by: Daniel P. Berrangé <[email protected]> Reviewed-by: Laurent Vivier <[email protected]> Reviewed-by: Michael Tokarev <[email protected]> Signed-off-by: Michael Tokarev <[email protected]> --- system/rtc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/rtc.c b/system/rtc.c index f13dd392a7..018609a4f9 100644 --- a/system/rtc.c +++ b/system/rtc.c @@ -41,8 +41,8 @@ static enum { RTC_BASE_DATETIME, } rtc_base_type = RTC_BASE_UTC; static time_t rtc_ref_start_datetime; -static int rtc_realtime_clock_offset; /* used only with QEMU_CLOCK_REALTIME */ -static int rtc_host_datetime_offset = -1; /* valid & used only with +static time_t rtc_realtime_clock_offset; /* used only with QEMU_CLOCK_REALTIME */ +static time_t rtc_host_datetime_offset = -1; /* valid & used only with RTC_BASE_DATETIME */ QEMUClockType rtc_clock; /***********************************************************/ -- 2.47.3