Hi, HAProxy 3.0-dev13 was released on 2024/05/24. It added 66 new commits after version 3.0-dev12.
Well, first, I really want to thank all those who've been trying 3.0-dev recently, this has been useful to nail down various issues, some quite recent and other ones much older, and it's way more efficient to work on bugs before a release than after, so keep up the great work! I hope this will encourage them to continue. Among the latest changes this week, I'm seeing some stability fixes and small updates here and there: - an issue where QUIC on LibreSSL could crash when using cipher TLS_AES_128_CCM_SHA256 that is normally not used ; - a workaround for an issue in LibreSSL with default algo CHACHA20_POLY1305 (that is used by default when running on machines without AES-NI, i.e. non-x86 these days), which would cause requests to hang because the data cannot be deciphered. The work around here consists in cleanly rejecting such connections for now on current version so that the client instantly retries using TCP. LibreSSL 4.0 will have the fix, and if it gets backported, we'll relax the test to include that fixed version as well. A config-based workaround consists in forcing the ciphers to exclude this one. - a possible leak of backend sockets when their FD number was a small multiple of 4096 due to the wrong variable being checked for an error code (since dev10 only). - rhttp's preconnect wouldn't work in single-thread due to an offset +1 on the owner thread ID when issuing connection requests. A few other fixes concern rhttp (listener not suspending, session origin after reversal). - server port lost on DNS resolution timeout, causing health check errors. - a few remaining races in stick-tables & peers (present since 2.9), super hard to reproduce... until you manage to see them in seconds and they cause crashes. They directly depend on the request rate and their increase in 3.0-dev is related to the lower threading overhead that increases performance and the probability to meet them. There are probably 2-3 deployments in the world able to trigger them, it's fortunate that they test -dev ;-) - the proxy protocol now also parses TLV for LOCAL mode and supports sending them without a stream so that elements can be passed during preconnect to a next stage that will no longer ignore them. - made sure that %[path] is never empty when sending an absolute request lacking the trailing /. - two new global settings now make it possible to simply prevent HAProxy from accepting traffic from privileged ports; one setting is for TCP and the other one for QUIC. QUIC was configured by default to refuse such traffic, because by relying on UDP it's particularly exposed to DNS and NTP amplification attacks, and while it's more efficient to filter such ports upstream, it's still very simple and cheap to just drop such undesirable packets before processing them. - David Carlier's VMA naming feature was generalized to various other areas so that on Linux when checking where HAProxy allocates memory in /proc/$pid/maps, some of these areas will appear and give hints about what causes this. - the name associated with servers in connection pools can now be overridden by the expression in pool-conn-name when SNI is not desired (useful with rhttp without SSL for example, but may also make sense when reaching remote servers over SSL tunnels). - the crt-store settings now properly make sure to avoid FS-based auto-discovery when some file components are explicitly named. - finally the thread-hard-limit global parameter was added. It allows to only set a hard limit on the number of threads without enforcing that value as the thread count (like nbthread does). That's convenient to prepare portable configs with no more than X threads when one knows it's only a waste of resources to use more. - build warnings on various configurations were resolved - updates to the build-ssl script to make it usable even outside of the CI (helps for quickly testing a specific implementation). - various doc cleanups That still looks like a lot but these are all just tiny tasks that were waiting for some more relaxed time to work on (aside the bugs of course). At this point it's been tested to run fine on various flavours of Linux on x86/arm64/mips32, FreeBSD amd64, OpenBSD mips64, Solaris sparc64. The testing of the various last important fixes has been good so far, this version essentially integrates everything together and I'd like it to be the one we release on Wednesday (more or less doc updates then). Given that remaining bugs are fixed and the small stuff done as well, I'd like that we only focus on the doc and testing during the next days and that the code is only changed if a significant regression is found (i.e. we avoid last-minute breakage). Also, I know well enough that it's sufficient to say that a version is the last -dev for about everyone to skip it and wait for the final one! That's one more reason for not waiting too long after it and not modifying it too much. 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.0/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.0/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 (20): BUG/MINOR: connection: parse PROXY TLV for LOCAL mode BUG/MINOR: server: free PROXY v2 TLVs on srv drop MINOR: rhttp: add log on connection allocation failure BUG/MEDIUM: rhttp: fix preconnect on single-thread BUG/MINOR: rhttp: prevent listener suspend BUG/MINOR: rhttp: fix task_wakeup state MINOR: session: define flag to explicitely release listener on free MEDIUM: rhttp: create session for active preconnect MINOR: rhttp: support PROXY emission on preconnect MINOR: connection: support PROXY v2 TLV emission without stream BUILD: trace: fix warning on null dereference MEDIUM: config: prevent communication with privileged ports MAJOR: config: prevent QUIC with clients privileged port by default BUG/MINOR: quic: adjust restriction for stateless reset emission MINOR: quic: clarify doc for quic_recv() MINOR: server: generalize sni expr parsing MINOR: server: define pool-conn-name keyword MEDIUM: connection: use pool-conn-name instead of sni on reuse BUG/MINOR: rhttp: initialize session origin after preconnect reversal DOC: quic: specify that connection migration is not supported Aurelien DARRAGON (11): BUG/MINOR: ring: free ring's allocated area not ring's usable area when using maps DEBUG: tools: add vma_set_name() helper DEBUG: shctx: name shared memory using vma_set_name() DEBUG: sink: add name hint for memory area used by memory-backed sinks DEBUG: pollers: add name hint for large memory areas used by pollers DEBUG: errors: add name hint for startup-logs memory area DEBUG: fd: add name hint for large memory areas CLEANUP: tools: fix vma_set_name() function comment DEBUG: tools: add vma_set_name_id() helper DEBUG: pollers/fd: add thread id suffix to per-thread memory areas name hints BUG/MEDIUM: server/dns: preserve server's port upon resolution timeout or error Christopher Faulet (8): BUG/MINOR: http-ana: Don't crush stream termination condition on internal error MAJOR: spoe: Let the SPOE back into the game BUG/MEDIUM: mux-quic: Create sedesc in same time of the QUIC stream MINOR: mux-quic: Set abort info for SC-less QCS on STOP_SENDING frame BUG/MEDIUM: stick-tables: Fix race with peers when trashing oldest entries BUG/MEDIUM: stick-tables: Fix race with peers when killing a sticky session BUG/MINOR: http-htx: Support default path during scheme based normalization BUG/MINOR: server: Don't reset resolver options on a new default-server line Frederic Lecaille (1): BUG/MAJOR: quic: Crash with TLS_AES_128_CCM_SHA256 (libressl only) Ilia Shipitsin (1): CI: scripts/build-ssl.sh: loudly fail on unsupported platforms Valentine Krasnobaeva (4): BUG/MEDIUM: proto: fix fd leak in <proto>_connect_server MINOR: sock: set conn->err_code in case of EPERM BUG/MINOR: sock: fix sock_create_server_socket MINOR: proto: fix coding style William Lallemand (9): CLEANUP: ssl/cli: remove unused code in dump_crtlist_conf MINOR: ssl: check parameter in ckch_conf_cmp() DOC: configuration: rework the crt-store load documentation MEDIUM: ssl: don't load file by discovering them in crt-store DOC: configuration: update the crt-list documentation DOC: configuration: add the supported crt-store options in crt-list REGTESTS: scripts: allow to change the vtest timeout CI: scripts/build-ssl: add a DESTDIR and TMPDIR variable CI: scripts/buil-ssl: cleanup the boringssl and quictls build Willy Tarreau (12): MINOR: traces: enumerate the list of levels/verbosities when not found BUG/MEDIUM: quic_tls: prevent LibreSSL < 4.0 from negotiating CHACHA20_POLY1305 MINOR: config: add thread-hard-limit to set an upper bound to nbthread BUILD: quic: fix unused variable warning when threads are disabled BUG/MEDIUM: stick-tables: make sure never to create two same remote entries CLEANUP: stick-tables: remove a few unneeded tests for use_wrlock MINOR: stick-tables: remove the uneeded read lock in stksess_free() DOC: config: fix aes_gcm_enc() description text DOC: config: fix incorrect section reference about custom log format DOC: config: uniformize the naming and description of custom log format args DOC: config: clarify the fact that custom log format is not just for logging REGTESTS: acl_cli_spaces: avoid a warning caused by undefined logs ---