Hi,
   IMAP hibernation compiles and attempts to run on FreeBSD 15.x (tested with
   Dovecot 2.4.4 and FreeBSD 15.1), but fails at runtime with:
   plain

 imap-hibernate: Error: conn unix:imap-hibernate (uid=125): Failed to parse 
client input: Invalid peer_dev_major value: 18446744073709551615

 Jun 24 21:27:08 classic dovecot[36888]: imap-hibernate: Error: conn 
unix:imap-hibernate (uid=125): Failed to parse client input: Invalid 
peer_dev_major value: 18446744073709551615
 Jun 24 21:27:08 classic dovecot[36888]: 
imap([email protected])<37120><ExaV/gNVAdt/AAAB>: Error: Couldn't hibernate 
imap client: /var/run/dovecot/imap-hibernate returned failure: Failed to parse 
client input: Invalid peer_dev_major value: 18446744073709551615

   Root cause:
   In src/imap/imap-client-hibernate.c, the code serializes peer_dev_major
   and peer_dev_minor using major() and minor() macros:
   c

 str_printfa(cmd, "\tpeer_dev_major=%lu\tpeer_dev_minor=%lu\tpeer_ino=%llu",
             (unsigned long)major(peer_st.st_dev),
             (unsigned long)minor(peer_st.st_dev),
             (unsigned long long)peer_st.st_ino);

   On FreeBSD, major() and minor() can return UINT64_MAX
   (18446744073709551615) for file descriptors that are not block/character
   devices (such as sockets on tmpfs/devfs). This value exceeds UINT_MAX and
   cannot be parsed by str_to_uint() in imap-master-client.c.
   Historical context:
   This was discussed on the Dovecot mailing list in July 2019 (thread:
   "Hibernation errors") but apparently never resolved upstream. The same
   failure mode persists in Dovecot 2.4.4.
   Impact:

     o IMAP hibernation is effectively non-functional on FreeBSD 15.x
     o Processes remain running indefinitely instead of being hibernated

   Documentation note:
   The Dovecot 2.4 documentation states that hibernation "is not supported on
   kqueue based systems currently, such as FreeBSD." However, the code still
   compiles and attempts to run, producing these errors rather than being
   disabled at compile time or gracefully skipped at runtime.
   Would it make sense to either:

    1. Disable hibernation at compile time for kqueue systems, or
    2. Add validation for major()/minor() return values before serialization?

   Thanks,
   Jordan
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to