Control: tags -1 + upstream
Control: forwarded -1 
https://dovecot.org/mailman3/archives/list/[email protected]/thread/HGMZZFEKSNCVHRGO5UPXM2GQTMUYSAOO/

On Fri, Jan 02, 2026 at 05:57:34PM +0100, Andy Spiegl wrote:
> 
> The function io_loop_get_wait_time in ioloop.c contains the line:
> 
>     ioloop->next_max_time.tv_sec = (1ULL << (TIME_T_MAX_BITS-1)) - 1;
> 
> On 32-bit systems TIME_T_MAX_BITS is 31 such that the result of this 
> calculation is 1073741823.  Far from the intended "infinity" and even before 
> "now".  This leads to problems in the function io_loop_handle_timeouts_real: 
> the calculation of the time difference between now and next_max_time is then 
> something like -693628953 seconds which confuses dovecot and floods the logs 
> with these warnings:
> 
> Jan 02 17:43:43 lmtp(38364): Warning: Time moved forward 693630400.301863 
> seconds
> Jan 02 17:43:43 lmtp(38364): Warning: Time moved forward 693630400.304144 
> seconds
> Jan 02 17:45:43 lmtp(38364): Warning: Time moved forward 693630520.416053 
> seconds

Note that this likely only impacts i386, which is the only architecture
in Debian where time_t is still 32 bits.  Other architectures, including
other 32-bit architectures, have transitioned to a 64 bit time_t.  For
compatibility reasons, i386 will continue to use a 32 bit time_t.

noah

Reply via email to