Hi,
HAProxy 3.2-dev10 was released on 2025/04/11. It added 46 new commits
after version 3.2-dev9.
Nothing really outstanding this week. A few bugs were addressed, the most
notable ones being:
- peers: it was possible to learn entries from peers which expire after
the locally configured expiration, causing bad entries to be very
difficult to eliminate from a cluster. Now the end date it checked and
the locally-configured one serves as a bound.
- regsub() converter: Aleandro Prudenzano of Doyensec and Edoardo Geraci
of Codean Labs found a risk of buffer overflow when replacing patterns
multiple times at once (multi-reference) with longer ones. The risk is
quite low since such configs are quite unlikely and in the rare cases
they will happen, the replacement will involve static contents, thus
essentially a risk of crash. Regardless, it is a bug and it's now
fixed. CVE-2025-32464 was filed for this. It affects all versions so
the fix will be backported and we'll take this opportunity for making
a new series of stable versions.
- there was still a case where a forced shutdown on a stream could freeze
it, it's now fixed.
A new warning was added for crt-lists to report a config issue where only
negative filters were used in crt-lists, which confusingly does nothing.
However, since we normally don't add warnings between non-LTS and the
following LTS in order to guarantee a smooth upgrade, we'll only turn it
to a diag warning in 3.2 and we'll turn it back to a real warning in 3.3.
The new in-line certificate declaration for frontends added in 3.2-dev
with the "crt" keyword are now replaced with "ssl-f-use" followed by
"crt". The rationale for this is that at some point this will permit to
configure certificates without having a preliminary one (for use with
ACME). Some extra ACME updates are already pending on this point and
will be available for 3.2-dev11.
Health checks now support being sent over idle connections when the
server line has the "check-reuse-pool" keyword. While one use case may
be to save SSL handshakes for some application servers, actually the
main target is the reverse-http architecture where it will be possible
to check the servers behind a reverse connection.
The Lua API got a few additions such as core.wait() and try_receive(),
which make it a bit easiler to implement non-blocking programs.
The "show events" CLI command now supports "-0" to request that events
are delimited with a \0 instead of a line break, this allows to use rings
to emit multi-line events to their watchers (similar to xargs -0). One
predicted use case will be to pass notifications to the dataplane API.
Aside this, there were some internal changes such as a cleanup of the
proxies initialization/deinitialization code to split alloc/dealloc
from initialization and avoid manually initializing them everywhere. The
rest are the usual cleanups, CI updates, build fixes and doc cleanups.
There's still some stuff already pending and coming soon (just the time
to finish some commit messages I guess):
- a bidirectional mode for master-cli commands forwarded to workers
allowing to call blocking commands such as "show events" or "wait"
- a full batch of ACME updates
- a few fixes
- idle-ping to check idle H2 connections
- better scalability for the round-robin algo
I'm also trying to fix some rare cases of deadlock in the watchdog
warnings. It's complicated because two signal handlers are being used
in parallel, and this is hard to follow and needs to be simplified. The
first attempt is not as positive as I hoped but I'll get back to this
so that we can definitely put an end to this issue and backport the
fixes.
But all these pending things must not be a justification for not testing
dev10 :-)
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
Sources : https://www.haproxy.org/download/3.2/src/
Git repository : https://git.haproxy.org/git/haproxy.git/
Git Web browsing : https://git.haproxy.org/?p=haproxy.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 (5):
MINOR: backend: mark srv as nonnull in alloc_dst_address()
BUG/MINOR: server: ensure check-reuse-pool is copied from default-server
MINOR: server: activate automatically check reuse for rhttp@ protocol
MINOR: check/backend: support conn reuse with SNI
MINOR: check: implement check-pool-conn-name srv keyword
Aurelien DARRAGON (20):
MINOR: task: add thread safe notification_new and notification_wake
variants
BUG/MINOR: hlua_fcn: fix potential UAF with Queue:pop_wait()
MINOR: hlua_fcn: register queue class using hlua_register_metatable()
MINOR: hlua: add core.wait()
MINOR: hlua: core.wait() takes optional delay paramater
MINOR: hlua: split hlua_applet_tcp_recv_yield() in two functions
MINOR: hlua: add AppletTCP:try_receive()
MINOR: hlua_fcn: add Queue:alarm()
MEDIUM: task: make notification_* API thread safe by default
CLEANUP: log: adjust _lf_cbor_encode_byte() comment
BUG/MINOR: log: fix CBOR encoding with LOG_VARTEXT_START() +
lf_encode_chunk()
DEV: h2: fix h2-tracer.lua nil value index
BUG/MINOR: hlua: fix invalid errmsg use in hlua_init()
MINOR: proxy: add setup_new_proxy() function
MINOR: checks: mark CHECKS-FE dummy frontend as internal
MINOR: flt_spoe: mark spoe agent frontend as internal
MEDIUM: tree-wide: avoid manually initializing proxies
MINOR: proxy: add deinit_proxy() helper func
MINOR: checks: deinit checks_fe upon deinit
MINOR: flt_spoe: deinit spoe agent proxy upon agent release
Christopher Faulet (2):
BUG/MEDIUM: stream: Fix a possible freeze during a forced shut on a stream
MEDIUM: stream: Save SC and channel flags earlier in process_steam()
Emeric Brun (2):
BUG/MINOR: peers: fix expire learned from a peer not converted from ms to
ticks
BUG/MEDIUM: peers: prevent learning expiration too far in futur from
unsync node
Ilia Shipitsin (3):
CI: spell check: allow manual trigger
CI: codespell: add "pres" to spellcheck whitelist
CLEANUP: assorted typo fixes in the code, commits and doc
Olivier Houchard (1):
TESTS: Fix build for filltab25.c
William Lallemand (6):
REORG: ssl: move curves2nid and nid2nist to ssl_utils
MEDIUM: ssl: replace "crt" lines by "ssl-f-use" lines
DOC: configuration: replace "crt" by "ssl-f-use" in listeners
MEDIUM: ssl/crt-list: warn on negative wildcard filters
MEDIUM: ssl/crt-list: warn on negative filters only
DOC: configuration: rework the crt-list section
Willy Tarreau (7):
CLEANUP: atomics: remove support for gcc < 4.7
CLEANUP: atomics: also replace __sync_synchronize() with
__atomic_thread_fence()
BUILD: atomics: fix build issue on non-x86/non-arm systems
BUG/MEDIUM: sample: fix risk of overflow when replacing multiple regex
back-refs
MINOR: ring: support arbitrary delimiters through ring_dispatch_messages()
MINOR: ring/cli: support delimiting events with a trailing \0 on "show
events"
BUG/MINOR: backend: do not use the source port when hashing clientip
---