Hi,

HAProxy 2.6.7 was released on 2022/12/02. It added 156 new commits
after version 2.6.6.

This release is quite huge. We were pretty busy the last 2 months, first
because of the HAProxy Conf, then because of the 2.7.0. It was high time to
release new stable versions.

First of all, there is a pending fix not included in this release. It was
first backported then reverted. It will be backported again just after the
release and will be shipped with the 2.6.8. The aim is to not introduce
issues for users waiting for this release for a long time. It is about the
"set-uri" HTTP action. Its behavior will change. The URI will be sent to H1
server exactly as set by the action. So you must be careful to be aware of
this change if you use it. You may use "set-path" or "set-pathq" actions
instead if this new behavior is not welcome.

Now about changes of the 2.6.7. This new release includes many QUIC fixes
and improvements. I'm honestly unable to describe all the changes in this
area. But it is worth noting that the QUIC stack is more or less the same
than the one of the recently released 2.7.0. All known bugs were fixed and
it should be fairly stable now. But it is still recommended to use
per-thread listener if QUIC traffic is too high, to reduce the CPU
consumption. From now, only bug fixes will be backported to 2.6. However the
2.7 should stay aligned on the 2.8-dev. So for any improvement, take a look
at the 2.7 releases.

Otherwise, here are the list of the main fixes:

 * Hash indexing on idle connections was fixed on 32-bit machines. The bug
   was due to an alignment issue causing the connection nodes to be indexed
   with their lower 32-bits set to zero and the higher 32 ones containing
   the 32 lower bits of the hash.

 * A major issue on sitck-tables were fixed about a possible crash if server
   name indexing is used to perform stickiness when the server is an applet.
   This is typically what happens when a "stick-store" rule is present in a
   backend featuring a "stats" directive. And at the end, to fix the bug,
   such rules must simply be ignored when the server is an applet.

 * A race condition on some global tasks was fixed. The stick-table
   expiration task and the listeners management task were concerned. These
   tasks may run on any thread. Both set their expiration date to
   TICK_ETERNITY. On the other hand, these task may be queued or scheduled
   from anywhere. The race was when the both happened at same time.  Indeed
   it is forbidden to queue a task with no expiration date. To prevent any
   issue, a locking mechanism is now used.

 * The HTTP client was fixed at many places. A client was able to hang
   forever if end of the request was detected while the buffer is empty. It
   was possible to crash HAProxy with a lua HTTP client if the lua task
   timeout expired before the HTTP client. Another crash was also possible at
   the release stage because the applet context was not properly clean up. A
   crash during the parsing could be experienced if a relative URI was used
   instead of an absolute one. In addition to these fixes, the memory
   allocation for the SSL ca_file was fixed.

 * The HTTP compression filter was fixed to properly handle rewrite errors.
   Indeed, on rewrite error, the compression is not performed. But in this
   case, we must be sure to remove the "Content-Encoding" header.

 * The FCGI multiplexer was fixed to avoid overflow on the data length
   copied into a buffer when STDIN record is built. This could happen when
   the buffer was almost full and lead to a crash.

 * A race condition was fixed on the resolvers. it was possible to release a
   resolution on one thread when a response was processed for this
   resolution on another thread, leading to a crash because of a UAF
   issue. This was possible because the aborted resolutions were not removed
   from the query_ids tree. Thus, it was still possible to get a reference
   on an aborted resolution, which is totally unexpected. In addition, a
   very old bug was fixed about resolution on healthcheck failure. Indeed,
   it is documented a new resolution is triggered in this case but since the
   resolver refactoring performed in 2017, it was no longer true.

 * Now, low-level errors at the socket layer are not immediately reported if
   some data were received, to let a chance to the mux layer to handle
   received data first instead of immediately aborting. This should fix some
   spurious health-check failures. It is pretty hard to observe, but with a
   server immediately returning the response followed by a RST, without
   waiting the request, it is possible to have some health-check errors.

 * A crash was fixed when an error was encountered during the stream
   creation, for instance because of a lua filter initialization failure.
   The stream-endpoint descriptor was not properly reset, triggering a
   BUG_ON() when the multiplexer stream on the frontend side was destroyed.

 * A crash during ring section parsing was fixed. If a "ring" section
   initialization failed (e.g. due to a duplicate name, invalid chars, or
   missing memory), any subsequent "server" statement found in the same
   section crashed the config parser by dereferencing the currently NULL
   cfg_sink.

 * In peers, messages about unknown table was not properly ignored. Those
   messages are now silently ignored and the upper layer continue the
   processing as it is done for any valid messages

 * Several issues was fixed on the lua, mainly on the HTTPMessage class.
   HTTPMessage.remove() and HTTPMessage.insert() are now working as
   expected. In addition, Channel.insert() was fixed to be aligned with the
   documentation. Finally the argument parsing when sample fetches or
   converters are called from lua was fixed to avoid crashes on failure and
   to properly handle implicit stick-table.

 * The pgsql healthcheck was update to support new authentication methods.
   Now AUTH_REQ_GSS, AUTH_REQ_GSS and AUTH_REQ_SASL are supported.

 * On connection retry, Turn-around, adding 1 second pause before connection
   retry, is now enforce only when no redispatch is performed.

 * A memory leak was fixed when some TXN variables were defined from a
   tcp-request ruleset for an HTTP session. Indeed, in this case, these
   variables were lost because of an extra list initialization during the
   HTTP transaction creation.

 * smtpchk healthcheck now gracefully close SMTP transaction by sending a
   QUIT message.

 * Error handling during http replies parsing was fixed to prevent any crash
   during arguments parsing while a log-format body was expected but not
   evaluated yet.

 * And finally, to finish this boring list, the usual fixes here and there,
   documentation and build improvements.

Thanks everyone for your help, your contributions and for your patience. A
2.5.10 should be quickly released. Probably on the next monday. And, later
the next week, it should be the turn for the 2.4.20 and 2.2.26. 2.0 and 1.8
will be evaluated later.


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/2.6/src/
   Git repository   : https://git.haproxy.org/git/haproxy-2.6.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-2.6.git
   Changelog        : https://www.haproxy.org/download/2.6/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 (44):
      CLEANUP: mux-quic: remove usage of non-standard ull type
      CLEANUP: quic: remove global var definition in quic_tls header
      BUG/MINOR: quic: adjust quic_tls prototypes
      CLEANUP: quic: fix headers
      CLEANUP: quic: remove unused function prototype
      CLEANUP: quic: remove duplicated varint code from xprt_quic.h
      CLEANUP: quic: create a dedicated quic_conn module
      BUG/MINOR: mux-quic: ignore STOP_SENDING for locally closed stream
      MINOR: quic: limit usage of ssl_sock_ctx in favor of quic_conn
      MINOR: mux-quic: check quic-conn return code on Tx
      CLEANUP: quic: fix indentation
      MEDIUM: quic: retrieve frontend destination address
      BUG/MINOR: quic: set IP_PKTINFO socket option for QUIC receivers only
      CLEANUP: quic: remove unused rxbufs member in receiver
      CLEANUP: quic: improve naming for rxbuf/datagrams handling
      MINOR: quic: implement datagram cleanup for quic_receiver_buf
      BUILD: ssl_sock: fix null dereference for QUIC build
      BUG/MINOR: quic: fix buffer overflow on retry token generation
      MINOR: quic: add version field on quic_rx_packet
      MINOR: quic: extend pn_offset field from quic_rx_packet
      MINOR: quic: define first packet flag
      MINOR: quic: extract connection retrieval
      MINOR: quic: split and rename qc_lstnr_pkt_rcv()
      MINOR: quic: refactor packet drop on reception
      MINOR: quic: extend Retry token check function
      BUG/MINOR: mux-quic: complete flow-control for uni streams
      MINOR: quic: do not crash on unhandled sendto error
      MINOR: quic: display unknown error sendto counter on stat page
      MINOR: quic: remove unnecessary quic_session_accept()
      BUG/MINOR: quic: fix subscribe operation
      BUG/MINOR: quic: fix race condition on datagram purging
      BUILD: quic: fix dubious 0-byte overflow on qc_release_lost_pkts
      MINOR: ncbuf: complete doc for ncb_advance()
      BUG/MEDIUM: quic: fix unsuccessful handshakes on ncb_advance error
      BUG/MEDIUM: quic: fix memleak for out-of-order crypto data
      MINOR: quic: complete traces/debug for handshake
      DOC: configuration: fix quic prefix typo
      MINOR: quic: report error if force-retry without cluster-secret
      MINOR: global: generate random cluster.secret if not defined
      DOC: quic: add note on performance issue with listener contention
      BUG/MEDIUM: quic: fix datagram dropping on queueing failed
      CLEANUP: ncbuf: remove ncb_blk args by value
      CLEANUP: ncbuf: inline small functions
      CLEANUP: ncbuf: use standard BUG_ON with DEBUG_STRICT

Aurelien DARRAGON (12):
      BUG/MINOR: hlua: fixing hlua_http_msg_del_data behavior
      BUG/MINOR: hlua: fixing hlua_http_msg_insert_data behavior
      BUG/MINOR: hlua: _hlua_http_msg_delete incorrect behavior when offset is 
used
      BUG/MINOR: hlua: hlua_channel_insert_data() behavior conflicts with 
documentation
      DOC: configuration: missing 'if' in tcp-request content example
      BUG/MINOR: log: fixing bug in tcp syslog_io_handler Octet-Counting
      BUG/MEDIUM: wdt/clock: properly handle early task hangs
      BUG/MINOR: http_ana/txn: don't re-initialize txn and req var lists
      BUG/MINOR: cfgparse-listen: fix ebpt_next_dup pointer dereference on proxy 
"from" inheritance
      BUG/MINOR: log: fix parse_log_message rfc5424 size check
      DOC: configuration.txt: add default_value for table_idle signature
      DOC: configuration.txt: fix typo in table_idle signature

Christopher Faulet (31):
      REGTESTS: 4be_1srv_smtpchk_httpchk_layer47errors: Return valid SMTP 
replies
      BUG/MINOR: stream: Perform errors handling in right order in stream_new()
      BUG/MEDIUM: stconn: Reset SE descriptor when we fail to create a stream
      BUG/MEDIUM: resolvers: Remove aborted resolutions from query_ids tree
      DOC: config: Fix pgsql-check documentation to make user param mandatory
      BUG/MINOR: http-fetch: Update method after a prefetch in smp_fetch_meth()
      BUG/MINOR: mux-h1: Account consumed output data on synchronous connection 
error
      MINOR: smtpchk: Update expect rule to fully match replies to EHLO commands
      BUG/MEDIUM: httpclient: Don't set EOM flag on an empty HTX message
      MINOR: httpclient/lua: Don't set req_payload callback if body is empty
      BUG/MINOR: log: Preserve message facility when the log target is a ring 
buffer
      BUG/MINOR: ring: Properly parse connect timeout
      BUG/MEDIUM: compression: handle rewrite errors when updating response 
headers
      BUG/MINOR: sink: Only use backend capability for the sink proxies
      BUG/MINOR: sink: Set default connect/server timeout for implicit ring 
buffers
      BUG/MAJOR: stick-table: don't process store-response rules for applets
      BUG/MINOR: http-htx: Fix error handling during parsing http replies
      BUG/MINOR: resolvers: Don't wait periodic resolution on healthcheck 
failure
      BUG/MINOR: resolvers: Set port before IP address when processing SRV 
records
      BUG/MINOR: mux-fcgi: Be sure to send empty STDING record in case of 
zero-copy
      BUG/MEDIUM: mux-fcgi: Avoid value length overflow when it doesn't fit at 
once
      REG-TESTS: cache: Remove T-E header for 304-Not-Modified responses
      BUG/MEDIUM: listener: Fix race condition when updating the global mngmt 
task
      BUG/MEDIUM: raw-sock: Don't report connection error if something was 
received
      BUILD: peers: Remove unused variables
      BUG/MINOR: http-htx: Don't consider an URI as normalized after a set-uri 
action
      BUILD: http-htx: Silent build error about a possible NULL start-line
      BUILD: ssl-sock: Silent error about NULL deref in 
ssl_sock_bind_verifycbk()
      BUG/MINOR: mux-h1: Fix handling of 408-Request-Time-Out
      Revert "BUG/MINOR: http-htx: Don't consider an URI as normalized after a 
set-uri action"
      MINOR: mux-h1: add the expire task and its expiration date in "show fd"

Emeric Brun (1):
      BUG/MEDIUM: peers: messages about unkown tables not correctly ignored

Erwan Le Goas (1):
      BUG/MINOR: config: don't count trailing spaces as empty arg (v2)

Fatih Acar (1):
      BUG/MINOR: checks: update pgsql regex on auth packet

Frédéric Lécaille (11):
      MINOR: quic: New quic_cstream object implementation
      MINOR: quic: Extract CRYPTO frame parsing from qc_parse_pkt_frms()
      MINOR: quic: Use a non-contiguous buffer for RX CRYPTO data
      BUG/MINOR: quic: Stalled 0RTT connections with big ClientHello TLS message
      MINOR: quic: Split the secrets key allocation in two parts
      BUILD: ssl_sock: bind_conf uninitialized in ssl_sock_bind_verifycbk()
      BUILD: quic: QUIC mux build fix for 32-bit build
      BUILD: quic: Fix build for m68k cross-compilation
      BUG/MAJOR: quic: Crash upon retransmission of dgrams with several packets
      BUG/MAJOR: quic: Crash after discarding packet number spaces
      BUG/MINOR: quic: Endless loop during retransmissions

Ilya Shipitsin (5):
      CI: SSL: use proper version generating when "latest" semantic is used
      CI: SSL: temporarily stick to LibreSSL=3.5.3
      CI: add monthly gcc cross compile jobs
      CI: switch to the "latest" LibreSSL
      CI: enable QUIC for LibreSSL builds

Mickael Torres (1):
      BUG/MINOR: mux-h1: Do not send a last null chunk on body-less answers

Miroslav Zagorac (1):
      BUG/MINOR: httpclient: fixed memory allocation for the SSL ca_file

Olivier Houchard (2):
      BUG/MEDIUM: lua: Don't crash in hlua_lua2arg_check on failure
      BUG/MEDIUM: lua: handle stick table implicit arguments right.

Remi Tricot-Le Breton (3):
      BUG/MINOR: ssl: Memory leak of DH BIGNUM fields
      BUG/MINOR: ssl: Memory leak of AUTHORITY_KEYID struct when loading issuer
      BUG/MINOR: ssl: ocsp structure not freed properly in case of error

Thierry Fournier (2):
      BUG/MINOR: hlua: Remove \n in Lua error message built with memprintf
      BUG/MEDIUM: httpclient: segfault when the httpclient parser fails

Tim Duesterhus (2):
      CI: Replace the deprecated `::set-output` command by writing to 
$GITHUB_OUTPUT in matrix.py
      CI: Replace the deprecated `::set-output` command by writing to 
$GITHUB_OUTPUT in workflow definition

William Lallemand (12):
      DOC: management: httpclient can resolve server names in URLs
      BUG/MEDIUM: httpclient/lua: crash when the lua task timeout before the 
httpclient
      BUG/MEDIUM: httpclient: check if the httpclient was released in the IO 
handler
      REGTESTS: httpclient/lua: test the lua task timeout with the httpclient
      CI: github: dump the backtrace of coredumps in the alpine container
      BUILD: Makefile: add "USE_SHM_OPEN" on the linux-musl target
      DOC: management: add forgotten "show startup-logs"
      DOC: lua: add a note about compression w/ httpclient
      BUG/MINOR: ssl: don't initialize the keylog callback when not required
      MINOR: ssl: enhance ca-file error emitting
      MINOR: ssl: forgotten newline in error messages on ca-file
      BUG/MINOR: ssl: shut the ca-file errors emitted during httpclient init

Willy Tarreau (26):
      BUG/MAJOR: conn-idle: fix hash indexing issues on idle conns
      BUG/MINOR: backend: only enforce turn-around state when not redispatching
      BUILD: h1: silence an initiialized warning with gcc-4.7 and -Os
      MINOR: fd: add a new function to only raise RLIMIT_NOFILE
      MINOR: init: do not try to shrink existing RLIMIT_NOFIlE
      BUILD: http_fetch: silence an uninitiialized warning with gcc-4/5/6 at -Os
      BUG/MEDIUM: config: count line arguments without dereferencing the output
      CLEANUP: quic/receiver: remove the now unused tx_qring list
      BUG/MAJOR: stick-tables: do not try to index a server name for applets
      BUG/MINOR: server: make sure "show servers state" hides private bits
      BUG/MEDIUM: stick-table: fix a race condition when updating the 
expiration task
      CI: emit the compiler's version in the build reports
      DOC: config: fix alphabetical ordering of global section
      BUG/MEDIUM: ring: fix creation of server in uninitialized ring
      BUG/MINOR: pool/cli: use ullong to report total pool usage in bytes
      BUG/MINOR: server/idle: at least use atomic stores when updating 
max_used_conns
      BUILD: listener: fix build warning on global_listener_rwlock without 
threads
      DOC: config: provide some configuration hints for "http-reuse"
      DOC: config: refer to section about quoting in the "add_item" converter
      DOC: config: clarify the fact that SNI should not be used in HTTP 
scenarios
      DOC: config: mention that a single monitor-uri rule is supported
      DOC: config: explain how default matching method for ACL works
      DOC: config: clarify the fact that "retries" is not just for connections
      DOC: config: clarify the -m dir and -m dom pattern matching methods
      SCRIPTS: announce-release: add a link to the data plane API
      MINOR: mux-h2: add the expire task and its expiration date in "show fd"

wrightlaw (1):
      BUG/MINOR: smtpchk: SMTP Service check should gracefully close SMTP 
transaction

--
Christopher Faulet

Reply via email to