Hi,

HAProxy 2.4.10 was released on 2021/12/23. It added 19 new commits
after version 2.4.9.

We've been digging with Tim, William and Christopher on a rather strange
looking issue that affects most users of SSL+SNI on servers and which by
itself deserves a fix. This issue stems from an old harmless bug that was
fixed during 2.5 but woken up by a recent fix for SNI in TLSv1.3. When a
server-side idle connection is reused, the configured SNI was set again
on the connection and that had the undesired side effect of resetting the
session's context, resulting in garbage being sent to the server, and the
request not being decipherable and the connection being reset, with the
error being propagated to the client side. This is what was causing some
RST_STREAM errors that some have noticed in their browsers. While this is
particularly annoying, among the garbage observed on the wire, we've even
noticed some clear text requests (as if openssl was using a NULL cipher),
which is sufficiently serious to deserve a quick fix.

The analysis indicates that 2.3 has the same issue, so a fix is warranted
there, but upgrading to 2.4.10 will fix it as well and I do not expect to
see that many 2.3 users anymore since it dies in a few months. Alternately
a temporary rollback to 2.3.15 would suffice. For 2.2 we're not certain,
but a recent issue report might indicate similar symptoms. However the fix
is not trivial to backport there so another option might be to revert the
aforementioned fix for now (which is currently under investigation).

2.5 and above are not affected.

Among the other relevant issues fixed in this version, here's what comes
to my mind:
  - using multiple log-forward sections would crash after parsing the
    config, that's now fixed.

  - possible crash on master CLI when trying to enter an old pid when
    in prompt mode

  - yet another risk of crash on resolvers was fixed, this time when
    getting a response error, because some invalid elements could be
    left in the list.

  - a possible crash when adding a server on the CLI with a custom ID
    because the key was not properly initialized.

  - some server-side SSL settings could be lost when using more than
    one default-server directive. Note: according to issue #1488
    (https://github.com/haproxy/haproxy/issues/1488) it seems that this
    fix is still not sufficient, but I don't know more at this point;
    it's already difficult to circle between bugs, it's even harder in
    this period to collect all info about previously validated fixes,
    so those suffering from this are invited to stay tuned.

  - a workaround for a possibly slow malloc_trim() in modern libcs upon
    reload when using many threads, that could be slow enough to panic
    the old process.

  - a few build fixes and doc fixes.

Please note that these are only the previously pending fixes with the last
ones merged. The period isn't great to deliver fixes, there's no emergency
but at least those who will have a quieter time next week might prefer to
use that time to apply fixes. As usual I'm definitely not encouraging anyone
to deploy on a Friday afternoon, especially this one. If you're not using
"sni" on your server lines, better wait for some quieter time or for next
release.

There are still a number of annoying issues under investigation for 2.4:
  - https://github.com/haproxy/haproxy/issues/1488
    double-free issue with SSL and default-server

  - https://github.com/haproxy/haproxy/issues/1499
    newly reported possible memory leak (not validated yet)

  - https://github.com/haproxy/haproxy/issues/1494
    crash of 2.4.9 in the SSL stack, still not understood. Trace
    under analysis.

  - https://github.com/haproxy/haproxy/issues/1498
    an interoperability issue with nghttp client when forcing a headers
    table size to zero. This is currently being discussed within the HTTP
    working group as it looks like there are two possible interpretations
    of the spec, and that most servers implement it similar to haproxy
    (and fail with nghttp). No emergency since the failure only happens
    when forcing the parameter.

When everyone is back to work at full speed, I have good hopes that all
of these will be quickly addressed and that we'll be able to emit another
2.4 with these issues fixed.

I don't intend to produce new 2.5, 2.3 nor 2.2 right now, as I just think
that nothing indicates any of these are legitimately needed, but I may
adjust my mind depending on requests.

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/

Willy
---
Complete changelog :
Amaury Denoyelle (3):
      BUILD/MINOR: server: fix compilation without SSL
      BUG/MINOR: backend: do not set sni on connection reuse
      BUG/MINOR: backend: restore the SF_SRV_REUSED flag original purpose

Christopher Faulet (8):
      BUG/MEDIUM: cli: Properly set stream analyzers to process one command at 
a time
      BUG/MINOR: server: Don't rely on last default-server to init server SSL 
context
      BUG/MEDIUM: resolvers: Detach query item on response error
      MINOR: mux-h1: Improve H1 traces by adding info about http parsers
      BUILD: bug: Fix error when compiling with -DDEBUG_STRICT_NOCRASH
      BUG/MINOR: cli/server: Don't crash when a server is added with a custom id
      DOC: spoe: Clarify use of the event directive in spoe-message section
      DOC: config: Specify %Ta is only available in HTTP mode

Emeric Brun (1):
      BUG/MAJOR: segfault using multiple log forward sections.

Lukas Tribus (1):
      DOC: config: retry-on list is space-delimited

William Lallemand (2):
      MINOR: cli: "show version" displays the current process version
      BUG/MEDIUM: mworker/cli: crash when trying to access an old PID in prompt 
mode

Willy Tarreau (4):
      CI: Github Actions: temporarily disable BoringSSL builds
      BUILD: tree-wide: avoid warnings caused by redundant checks of obj_types
      IMPORT: slz: use the correct CRC32 instruction when running in 32-bit mode
      MINOR: pools: work around possibly slow malloc_trim() during gc

---

Reply via email to