Hi,

HAProxy 3.1.3 was released on 2025/01/29. It added 17 new commits
after version 3.1.2.

This release is pretty light but it fixes some annoying bugs. First one is
about the way QUIC CRYPTO frames were stored internally to handle unordered
frames reception. There was no control on the relative frame position that
could lead to a crash when this position was too high to be stored. Now, when
this happens, the connection is closed with CRYPTO_BUFFER_EXCEEDED error, as
required by the QUIC specification. The second one is about the logs and
rings. Log messages were sent to all servers sharing the same name but
defined in distinct log backends, because all these servers shared the same
sink. To fix the issue, the sink name used for a log server is now prefixed
with the backend name, making it truly unique. Finally, the last major bug
is about the Prometheus exporter. When backends extra counters were dumped,
the wrong pointer was used in the promex context to retrieve the
corresponding stats module, leading to memory corruptions and crashes. This
issue is mitigated by the fact the Prometheus exporter should never be
exposed.

Other bugs fixed by this released are more usual:

  * Some locks were missing on some stick-table converters. No issue was
    reported about this bug but it could lead to inconsistent values being
    reported by "table_*" converters.

  * In H1, it was possible to have unusable client connections waiting for
    the client timeout while they should be closed. This happened when a
    connection error was immediately encountered after the connection
    establishment, in same time of the connection closure. It was not a leak
    because connections were finally closed but it was a waste of
    ressources, especially with a high client timeout.

  * Crashes could be encountered because of a use-after-free bug after two
    QUIC packets were coalesced.

  * QUIC NEW_TOKEN frames emitted by clients were not reject as expected. Now
    when this happens, the connection is closed with PROTOCOL_VIOLATION error
    code.

  * The QUIC congestion window was increased each time a new acknowledge was
    received without considering the window filling level. On a network
    condition with negligible loss, this would cause the window to be
    incremented until the maximum value, even though the application does not
    have enough data to fill it. In most case, this issue was not
    noticeable. However, it could lead to an excessive memory consumption when a
    QUIC connection was suddenly interrupted, as in this case HAProxy would
    fill the window with retransmission. It even caused OOM crash when thousands
    of clients were interrupted at once on a local network benchmark.

  * "on-marked-up shutdown-backup-sessions" action was no longer working. It was
    broken when the shutdown of a stream was modified to be async-safe. When
    this part was fixed, the active stream shutdowns, via the CLI for instance,
    and "on-marked-down shutdown-sessions" action were properly handled. But not
    the shutdown of backup sessions.

  * An issue could be experienced on big-endian architecture in stick-table
    sample fetch functions and converters because of conversions from 64-bit
    integers and 32-bit ones.

  * The HAPROXY_STARTUP_VERSION environment variable, defined during the init
    stage, was set from a macro instead of being set from a variable. Depending
    on how HAProxy is rebuilt, this could make debugging sessions confusing
    because the version exposed in the environment was not necessarily the same
    as the one presented in "haproxy -vv".

Thanks everyone for your help ! New releases should be expected for other stable
versions, most probably as far as 2.6.

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.1/src/
   Git repository   : https://git.haproxy.org/git/haproxy-3.1.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-3.1.git
   Changelog        : https://www.haproxy.org/download/3.1/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


---
Complete changelog :
Amaury Denoyelle (4):
      BUG/MINOR: quic: reject NEW_TOKEN frames from clients
      BUG/MAJOR: quic: reject too large CRYPTO frames
      BUG/MINOR: quic: do not increase congestion window if app limited
      CLEANUP: quic: remove unused prototype

Aurelien DARRAGON (3):
      BUG/MINOR: stktable: fix big-endian compatiblity in smp_to_stkey()
      BUG/MEDIUM: stktable: fix missing lock on some table converters
      BUG/MAJOR: log/sink: possible sink collision in sink_new_from_srv()

Christopher Faulet (3):
      BUG/MEDIUM: promex: Use right context pointers to dump backends 
extra-counters
      BUG/MEDIUM: mux-h1: Properly close H1C if an error is reported before 
sending data
      BUG/MINOR: stream: Properly handle "on-marked-up shutdown-backup-sessions"

Frederic Lecaille (3):
      BUG/MINOR: quic: ensure a detached coalesced packet can't access its 
neighbours
      MINOR: quic: Add a BUG_ON() on quic_tx_packet refcount
      BUILD: quic: Move an ASSUME_NONNULL() for variable which is not null

Valentine Krasnobaeva (1):
      BUG/MINOR: ssl: put ssl_sock_load_ca under SSL_NO_GENERATE_CERTIFICATES

William Lallemand (2):
      BUILD: ssl: allow to build without the renegotiation API of WolfSSL
      BUILD: ssl: more cleaner approach to WolfSSL without renegotiation

Willy Tarreau (1):
      BUG/MINOR: init: set HAPROXY_STARTUP_VERSION from the variable, not the 
macro

--
Christopher Faulet



Reply via email to