Hi,
HAProxy 2.4.14 was released on 2022/02/25. It added 26 new commits
after version 2.4.13.
The main issues fixed in this version are:
- A major issue in the H2 multiplexer. An error during the response
processing, after the HEADERS frame parsing, led to a wakeup loop
consuming all the CPU because the error was not properly reported to the
upper layer. For instance, this happened if an invalid header value, an
invalid status code or a forbidden header was found in the
response. Note that only HAProxy >= 2.4 are affected by this issue.
- A FD leak on reload failures. When the master process is reloaded on a
new config, it will try to connect to the previous process' socket to
retrieve all known listening FDs to be reused by the new listeners. If
listeners were removed, their unused FDs are simply closed. However
there's a catch. In case a socket fails to bind, the master will cancel
its startup and switch to wait mode for a new operation to happen. In
this case it didn't close the possibly remaining FDs that were left
unused.
- A FD leak of a sockpair upon a failed reload. When starting HAProxy in
master-worker, the master pre-allocate a struct mworker_proc and do a
socketpair() before the configuration parsing. If the configuration
loading failed, the FD was never closed because they aren't part of
listener, they are not even in the fdtab.
- Some issues about errors on buffers allocation. First, in the H1
multiplexer. If we failed to send data because we failed to allocate the
H1 output buffer, the H1 stream was erroneously woken up. This led to a
wakeup loop to send more data while it is not possible because there is
no output buffer. Then, in process_stream(), if we failed to allocate
the channel response buffer while a connect or an analysis timeout
occurred, the stream was woken up in loop because its task was requeued
with an expired date. Now an error is reported when this happens and the
stream processing is interrupted.
Note there is a mechanism to deal with errors on buffers allocation.
Unfortunately, since the 1.7, this mechanism is broken. And it is even
worse now with the multiplexers. All this part must be refactored. But
for now, HAProxy may be partially frozen if too many entities are
waiting for a buffer.
- Some alignment problems that were found when using gcc-11 + RHEL8,
resulting in instant crashes on startup.
- An issue with multi-line ESMTP response in the mailer code.
- An issue in the resolvers code with domain names with a trailing dot. The
trailing dot was not ignored as expected and a junk character was added
at the end of the encoded part of the domain name.
The remaining is the usual bunch of fixes and improvements. As usual, people
using the 2.4 branch are encouraged to migrate to this version.
Thanks everyone for your help and your contributions!
Please find the usual URLs below :
Site index : http://www.haproxy.org/
Discourse : http://discourse.haproxy.org/
Slack channel : https://slack.haproxy.org/
Issue tracker : https://github.com/haproxy/haproxy/issues
Wiki : https://github.com/haproxy/wiki/wiki
Sources : http://www.haproxy.org/download/2.4/src/
Git repository : http://git.haproxy.org/git/haproxy-2.4.git/
Git Web browsing : http://git.haproxy.org/?p=haproxy-2.4.git
Changelog : http://www.haproxy.org/download/2.4/src/CHANGELOG
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
---
Complete changelog :
Christopher Faulet (6):
BUG/MINOR: sink: Use the right field in appctx context in release callback
BUG/MEDIUM: resolvers: Really ignore trailing dot in domain names
BUG/MEDIUM: htx: Be sure to have a buffer to perform a raw copy of a
message
BUG/MEDIUM: mux-h1: Don't wake h1s if mux is blocked on lack of output
buffer
BUG/MAJOR: mux-h2: Be sure to always report HTX parsing error to the app
layer
BUG/MEDIUM: stream: Abort processing if response buffer allocation fails
Ilya Shipitsin (4):
BUILD: adopt script/build-ssl.sh for OpenSSL-3.0.0beta2
CI: github actions: add OpenSSL-3.0.0 builds
CI: github actions: relax OpenSSL-3.0.0 version comparision
CI: github actions: update OpenSSL to 3.0.1
Lukas Tribus (1):
BUG/MINOR: mailers: negotiate SMTP, not ESMTP
William Lallemand (5):
BUG/MINOR: mworker: fix a FD leak of a sockpair upon a failed reload
BUILD: fix compilation for OpenSSL-3.0.0-alpha17
CI: github actions: -Wno-deprecated-declarations with OpenSSL 3.0.0
CI: github: switch to OpenSSL 3.0.0
BUG/MINOR: tools: url2sa reads ipv4 too far
Willy Tarreau (10):
MINOR: sock: move the unused socket cleaning code into its own function
BUG/MEDIUM: mworker: close unused transferred FDs on load failure
BUG/MEDIUM: fd: always align fdtab[] to 64 bytes
BUG/MAJOR: compiler: relax alignment constraints on certain structures
CI: ssl: enable parallel builds for OpenSSL on Linux
CI: ssl: do not needlessly build the OpenSSL docs
CI: ssl: keep the old method for ancient OpenSSL versions
BUG/MINOR: proxy: preset the error message pointer to NULL in
parse_new_proxy()
REGTESTS: fix the race conditions in 40be_2srv_odd_health_checks
CI: github: enable pool debugging by default
--
Christopher Faulet