Dear dovecot team,

I believe I found a bug in dovecot on 32-bit systems.

Dovecot version:
 1:2.4.1+dfsg1-6  (Architecture: i386)

Operating system:
Linux lar 6.13.7-64+ #1 SMP PREEMPT Fri Mar 21 08:33:47 MEZ 2025 x86_64 
GNU/Linux

Distributor ID: Debian
Description:    Debian GNU/Linux 13 (trixie)
Release:        13
Codename:       trixie

 * What led up to the situation?
Upgrade from 2.3.21.1 to 1:2.4.1

  * What was the outcome of this action?
Logs are flooded with messages "Warning: Time moved forward"

  * Problem Description:

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

* Possible solution/workaround ?
    ioloop->next_max_time.tv_sec = INT_MAX;

Thanks for your consideration,
 Andy
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to