Hi,

HAProxy 3.3-dev11 was released on 2025/10/31. It added 82 new commits
after version 3.3-dev10.

Various issues were addressed in this version (some of which will lead
to backports), namely pool pool alignment issues that could cause crashes
in certain cases, an overzealous vectorization issue with gcc-15 resulting
in crashes on certain older flavors of x86_64, a format layout inconsistency
on the shared stats file that prevented it from working on 32-bit machines,
a design limitation of ncbuf (used by QUIC) where excessive CRYPTO frames
reordering could make some handshakes fail with a few recent clients that
would leave too short holes between them, a possible crash when updating
certain SSL certificates on the CLI, errors when dealing with certain 1xx
responses in H3, 0-rtt not working again on the frontend for H1 and on the
and the backend for H2, and a few other ones.

On the front of the new stuff, I'm seeing:
  - some updates on ACME to improve dns-01 challenge support via the
    dataplane API

  - as quickly mentioned above, we started to get reports of failed QUIC
    handshakes that could be tracked down to recent Firefox versions and
    ngtcp2 versions that mangle crypto frames order to complicate their
    inspection by bad actors on the path. However their reordering becomes
    hard to handle with too short holes between adjacent frames (e.g. one
    single byte), making the current non-contiguous buffer (ncbuf) reach
    its limit, not being able to store such data. This was reworked with
    an alternative (but still pretty close) model that allows single-byte
    holes now and was confirmed to work well (thank you Annika!). It was
    already backported to 3.2.7 and will progressively flow to other
    versions. It's not exactly a bug, more an interoperability limitation
    that was addressed. If you're using QUIC on 3.3, please update, you
    could see better stats.

  - some updates to the CLI applet to avoid sending LFs one at a time when
    dealing with long pipelined commands. Not only this was making socat
    run at 100% CPU receiving one byte at a time, but we discovered that
    it would break some older tolls that would send a few commands then
    disconnect because the intermediate LFs would get an EPIPE from the
    closed connection. Since old tools were relying on an optimization,
    let's reimplement the optimization to keep them happy and improve
    other ones anyway.

  - some improvements were made to the stick-tables locking. It's much
    more complicated than initially thought, and some of the attempts at
    improving the situation were not successful enough (i.e. some gains
    and some losses). However those which only provided consistent gains
    were integrated (essentially anything related to splitting locking by
    buckets).

  - TLS ECH (Encrypted Client Hello) was finally merged. ECH is mainly
    used to avoid the SNI (Server Name Indication) to be sent in clear,
    because that has always been a significant weakness of TLS, that it
    was possible to know what site was being visited. It's a concern for
    those working in censored areas for example. With ECH, a public key
    is shared in a DNS record, and the client can use it to encrypt the
    ClientHello and not disclose where it's going. Note that this only
    makes sense if the key retrieval is secured as well (e.g. DoH).
    Entries can be added, consulted and updated from the CLI. This was
    a contribution from Stephen Farrell who's been working on this for
    HAProxy and other stacks for a while now, and maintaining test
    instances at defo.ie. Now the implementation reached a state where
    it could be merged and maintained, so the timing was perfect.

  - The new "ssl-passphrase-cmd" directive permits to specify a command
    to be run to retrieve a passphrase to unlock protected certificates.
    The command will only ask for certificates that couldn't be unlocked
    using previously entered passphrases, so when most of them are the
    same (commonly seen), few commands will be issued. Protected certs
    will not have their private key dumped on the CLI.

  - a number of outdated or confusing QUIC settings were dropped, renamed
    or refined. The renamed ones still work, and issue a deprecation
    warning referencing the new keyword. Old ones will be dropped in 3.5.

  - the rest is essentially reg tests, CI updates and doc updates.

We're now roughly one month away from the release, so it's time to calm
down on changes and to focus on finalizing what's already merged, testing
and fixing bugs. Let's postpone new stuff for 3.4 now. User tests are
super important, especially with new features as it's not to late to
rename an option or adjust something that could be confusing or not
convenient. At the risk of repeating myself, please test it, try to
break it and report!

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.3/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.3/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 (23):
      BUG/MEDIUM: h3: properly encode response after interim one in same buf
      MINOR: ncbuf: extract common types
      MINOR: ncbmbuf: define new ncbmbuf type
      MINOR: ncbmbuf: implement add
      MINOR: ncbmbuf: implement iterator bitmap utilities functions
      MINOR: ncbmbuf: implement ncbmb_data()
      MINOR: ncbmbuf: implement advance operation
      MINOR: ncbmbuf: add tests as standalone mode
      BUG/MAJOR: quic: use ncbmbuf for CRYPTO handling
      MINOR: quic: remove received CRYPTO temporary tree storage
      MINOR: quic: remove unused conn-tx-buffers limit keyword
      MINOR: quic: prepare support for options on FE/BE side
      MINOR: quic: rename "no-quic" to "tune.quic.listen"
      MINOR: quic: duplicate glitches FE option on BE side
      MINOR: quic: split congestion controler options for FE/BE usage
      MINOR: quic: split Tx options for FE/BE usage
      MINOR: quic: rename max Tx mem setting
      MINOR: quic: rename retry-threshold setting
      MINOR: quic: rename frontend sock-per-conn setting
      BUG/MINOR: quic: split max-idle-timeout option for FE/BE usage
      BUG/MINOR: quic: split option for congestion max window size
      BUG/MINOR: quic: rename and duplicate stream settings
      BUG/MINOR: acl: warn if "_sub" derivative used with an explicit match

Aurelien DARRAGON (8):
      MINOR: stats-file: fix typo in shm-stats-file object struct size detection
      MINOR: compiler: add FIXED_SIZE(size, type, name) macro
      MEDIUM: freq-ctr: use explicit-size types for freq-ctr struct
      BUG/MAJOR: stats-file: ensure shm_stats_file_object struct mapping 
consistency
      Revert "BUG/MAJOR: stats-file: ensure shm_stats_file_object struct 
mapping consistency"
      Revert "MEDIUM: freq-ctr: use explicit-size types for freq-ctr struct"
      Revert "MINOR: compiler: add FIXED_SIZE(size, type, name) macro"
      BUG/MAJOR: stats-file: ensure shm_stats_file_object struct mapping 
consistency (2nd attempt)

Christopher Faulet (3):
      BUG/MEDIUM: h1-htx: Don't set HTX_FL_EOM flag on 1xx informational 
messages
      BUG/MEDIUM: applet: Improve again spinning loops detection with the new 
API
      BUG/MINOR: resolvers: Apply dns-accept-family setting on additional 
records

Frederic Lecaille (2):
      BUG/MINOR: quic-be: unchecked connections during handshakes
      REGTEST: quic: add ssl_reuse.vtc new QUIC test

Huangbin Zhan (1):
      MINOR: http: fix 405,431,501 default errorfile

Ilia Shipitsin (1):
      CI: disable fail-fast on fedora rawhide builds

Olivier Houchard (11):
      BUG/MEDIUM: mt_list: Make sure not to unlock the element twice
      MINOR: initcalls: Add a new initcall stage, STG_INIT_2
      MEDIUM: stick-tables: Use a per-shard expiration task
      MEDIUM: stick-tables: Remove the table lock
      MEDIUM: stick-tables: Stop if stktable_trash_oldest() fails.
      MEDIUM: stick-tables: Stop as soon as stktable_trash_oldest succeeds.
      BUG/MEDIUM: stick-tables: Don't loop if there's nothing left
      BUG/MEDIUM: mt_lists: Avoid el->prev = el->next = el
      BUG/MEDIUM: mt_list: Use atomic operations to prevent compiler optims
      MEDIUM: quic: Fix build with openssl-compat
      MEDIUM: h1: Immediately try to read data for frontend

Remi Tricot-Le Breton (8):
      BUG/MEDIUM: ssl: Crash because of dangling ckch_store reference in a ckch 
instance
      BUG/MINOR: ssl: Remove unreachable code in CLI function
      BUG/MINOR: init: Do not close previously created fd in stdio_quiet
      MINOR: init: Make devnullfd global and create it earlier in init
      MINOR: init: Use devnullfd in stdio_quiet calls instead of recreating a 
fd everytime
      MEDIUM: ssl: Add certificate password callback that calls external command
      MEDIUM: ssl: Add local passphrase cache
      MINOR: ssl: Do not dump decrypted privkeys in 'dump ssl cert'

William Lallemand (8):
      MINOR: acme: add the dns-01-record field to the sink
      MINOR: acme: display the complete challenge_ready command in the logs
      BUG/MINOR: ssl: returns when SSL_CTX_new failed during init
      MINOR: listener: implement bind_conf_find_by_name()
      CI: github: add USE_ECH=1 to haproxy for openssl-ech job
      DOC: configuration: "ech" for bind lines
      BUG/MINOR: ech: non destructive parsing in cli_find_ech_specific_ctx()
      DOC: management: document ECH CLI commands

Willy Tarreau (14):
      BUG/MEDIUM: cli: also free the trash chunk on the error path
      BUG/MAJOR: pools: fix default pool alignment
      BUG/MEDIUM: build: limit excessive and counter-productive gcc-15 
vectorization
      BUG/MINOR: stick-tables: properly index string-type keys
      BUILD: openssl-compat: fix build failure with OPENSSL=0 and KTLS=1
      MINOR: applet: do not put SE_FL_WANT_ROOM on rcv_buf() if the channel is 
empty
      MINOR: cli: create cli_raw_rcv_buf() from the generic applet_raw_rcv_buf()
      BUG/MEDIUM: cli: do not return ACKs one char at a time
      DOC: config: fix confusing typo about ACL -m ("now" vs "not")
      DOC: config: slightly clarify the ssl_fc_has_early() behavior
      MINOR: ssl-sample: add ssl_fc_early_rcvd() to detect use of early data
      MEDIUM: mux-h2: do not needlessly refrain from sending data early
      MINOR: mux-h2: extract the code to send preface+settings into its own 
function
      BUG/MINOR: mux-h2: send the preface along with the first request if needed

sftcd (3):
      MEDIUM: ssl/ech: config and load keys
      MINOR: ssl/ech: add logging and sample fetches for ECH status and outer 
SNI
      MINOR: ssl/ech: key management via stats socket

---


Reply via email to