Hi,

HAProxy 3.2.9 was released on 2025/11/21. It added 37 new commits
after version 3.2.8.

Nothing critical in this version either, but sufficient for a new release:

- the fix in 3.2.8 for the rare race condition that could occasionally
  cause a crash when an idle connection was ending at the exact same
  moment it was about to be purged didn't work well. It indeed plugged the
  race, but it broke connection accounting (it's in fact what caused the
  strange negative connection count I said I observed last time), because
  the flags that were being relied on are also used to update counters.
  This fix was reverted and a new, more involved one was made based on
  list membership, which looks better, and that this time we couldn't
  break.

- the ACME scheduler was reworked to use a scalable ebmbtree with
  read-write locks instead of a linear list. This was done in anticipation
  of large setups with many certificates where we'd rather not run over
  long lists of hundreds of thousands of certs for each lookup. Also, a
  failure to initialize resolvers could happen if the default resolvers
  section was declared after an ACME section (that already makes use of
  it). It will also check if a referenced map exists, and print a warning
  if not. Last, the error on account file creation failure will now be
  clearer than just "acme: out of memory".

- stick-tables had two issues: one by which a local update was not always
  propagated to peers if the entry had been received from them first, and
  another one where the refcount of an entry can become inconsistent and
  prevent the entry from ever expiring if a local and remote update happen
  at the exact same time and the local entry is created at the moment the
  peers code releases the lock.

- a crash that could occur after HTTP/2 upgrades from HTTP/1.1 has been
  resolved. The issue stemmed from the mux not being able to report that
  it had only released its structure and not the whole conenction, causing
  the SSL tasklet to never be freed while being returned as running, thus
  causing an infinite loop.

- QUIC SSL session reuse was fixed for OpenSSL 3.5, which was preventing
  clients from reusing their SSL sessions properly.

- a failure to allocate a new QUIC Connection ID during a
  RETIRE_CONNECTION_ID frame was silently ignored, potentially leaving
  the peer without valid IDs and causing connection failures. Now, such
  allocation errors are treated as fatal, closing the connection promptly,
  which is safer when memory pressure is high and prevents silent
  degradation of connectivity.

- The ALPN handling for listeners was improved to better handle cases
  where the protocol is forced with the "proto" keyword, preventing
  connection errors in certain configurations (e.g. when "proto h1" is
  forced while the default ALPN was still "h2,http/1.1").

- the value of "tune.maxpollevents" could lead to an integer overflow
  when calculating the size to be allocated, resulting in a failure
  that would cause the poller to process no events at all (in practice
  the process is totally unresponsive). The value is now capped to
  1 million, which is 4000 times higher than the default (250) and
  already does not make much sense, it should not need to be touched
  again for the next century.

- in master-worker mode, signal handling during startup and reload has
  been corrected. Previously, it was possible to trigger a reload while
  the configuration was still being parsed, leading to inconsistent
  states. Now, signals are properly blocked during parsing, ensuring
  atomicity and avoiding race conditions that could result in crashes or
  failed reloads.

- under rare conditions the queue management code could try another server
  then fail and finally find an entry on a previously considered one, and
  this rare specific return path was missing an unlock, leaving the queue
  locked, and leaving it to the watchdog to fix the forthcoming deadlock
  by killing the process.

- the haproxy-dump-certs script seems to be functional for a few of us
  using it with ACME so we thought it was a good idea to backport it
  to 3.2 to ease backing up the updated certs.

- a larger-than-guaranteed alignment in the struct proxy was fixed, which
  could cause some native builds at -O3 to crash on boot if the compiler
  decides to use avx512 instructions on structs that are less aligned than
  64.

The rest is pretty minor, essentially doc updates, most of which concern
ACME. For most users there is no emergency on this version either, as it
mainly addresses races that are only triggered under high loads. But if
you're impacted by one of the issues above, or have upgraded to 3.2.8 to
fix the rare conn->mux crash, then you should upgrade to this one again.

Thanks to all those who provided feedback permitting to fix these issues!

Please find the usual URLs below :
   Site index       : https://www.haproxy.org/
   Documentation    : https://docs.haproxy.org/
   Wiki             : https://github.com/haproxy/wiki/wiki
   Discourse        : https://discourse.haproxy.org/
   Slack channel    : https://slack.haproxy.org/
   Issue tracker    : https://github.com/haproxy/haproxy/issues
   Q&A from devs    : https://github.com/orgs/haproxy/discussions
   Sources          : https://www.haproxy.org/download/3.2/src/
   Git repository   : https://git.haproxy.org/git/haproxy-3.2.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-3.2.git
   Changelog        : https://www.haproxy.org/download/3.2/src/CHANGELOG
   Dataplane API    : 
https://github.com/haproxytech/dataplaneapi/releases/latest
   Pending bugs     : https://www.haproxy.org/l/pending-bugs
   Reviewed bugs    : https://www.haproxy.org/l/reviewed-bugs
   Code reports     : https://www.haproxy.org/l/code-reports
   Latest builds    : https://www.haproxy.org/l/dev-packages

Willy
---
Complete changelog :
Amaury Denoyelle (4):
      Revert "BUG/MEDIUM: connections: permit to permanently remove an idle 
conn"
      BUG/MEDIUM: connection: do not reinsert a purgeable conn in idle list
      BUG/MINOR: quic: close connection on CID alloc failure
      BUG/MINOR: check: fix reuse-pool if MUX inherited from server

Christopher Faulet (6):
      BUG/MINOR: config: Limit "tune.maxpollevents" parameter to 1000000
      BUG/MEDIUM: stick-tables: Always return the good stksess from 
stktable_set_entry
      BUG/MINOR: stick-tables: Fix return value for __stksess_kill()
      MINOR: muxes: Support an optional ALPN string when defining mux protocols
      MINOR: config: Do proto detection for listeners before checks about ALPN
      BUG/MEDIUM: config: Use the mux protocol ALPN by default for listeners if 
forced

Damien Claisse (1):
      MINOR: ssl/sample: expose ssl_*c_curve for AWS-LC

Frederic Lecaille (1):
      BUG/MINOR: quic-be: backend SSL session reuse fix (OpenSSL 3.5)

Lukas Tribus (1):
      DOC: http: document 413 response code

Olivier Houchard (4):
      BUG/MEDIUM: stick-tables: Make sure updates are seen as local
      MINOR: h1: h1_release() should return if it destroyed the connection
      BUG/MEDIUM: h1: prevent a crash on HTTP/2 upgrade
      BUG/MEDIUM: queues: Don't forget to unlock the queue before exiting

William Lallemand (18):
      BUG/MINOR: acme: more explicit error when BIO_new_file()
      BUG/MEDIUM: acme: move from mt_list to a rwlock + ebmbtree
      BUG/MINOR: acme: can't override the default resolver
      DOC: configuration: add missing ssllib_name_startswith()
      DOC: configuration: add missing openssl_version predicates
      BUG/MEDIUM: mworker: signals inconsistencies during startup and reload
      BUG/MINOR: mworker: wrong signals during startup
      BUG/MINOR: ssl: remove dead code in ssl_sock_from_buf()
      BUG/MINOR: acme: alert when the map doesn't exist at startup
      DOC: acme: add details about the DNS-01 support
      DOC: acme: explain how to dump the certificates
      DOC: acme: configuring acme needs a crt file
      ADMIN: haproxy-dump-certs: implement a certificate dumper
      ADMIN: dump-certs: don't update the file if it's up to date
      ADMIN: dump-certs: create files in a tmpdir
      ADMIN: dump-certs: fix lack of / in -p
      ADMIN: dump-certs: use same error format as haproxy
      ADMIN: dump-certs: let dry-run compare certificates

Willy Tarreau (2):
      BUG/MEDIUM: connection/ssl: also fix the ssl_sock_io_cb() regarding idle 
list
      BUG/MEDIUM: proxy: do not align proxy_per_tgroup beyond allocator's 
capabilities

---


Reply via email to