Re: [PATCH v2] system/rtc: Fix a possible year-2038 integer overflow problem

Laurent Vivier <[email protected]> Mon, 18 May 2026 18:57:19 +0200
Newsgroups org.nongnu.qemu-trivial,org.nongnu.qemu-devel
Message-ID <[email protected]>
Le 18/05/2026 à 18:34, Thomas Huth a écrit :
> 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]>
> ---
>   v2: Use time_t instead of int64_t
> 
>   system/rtc.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/system/rtc.c b/system/rtc.c
> index f13dd392a76..018609a4f9a 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;
>   /***********************************************************/

Reviewed-by: Laurent Vivier <[email protected]>