Hi,

HAProxy 2.2.26 was released on 2022/12/09. It added 80 new commits
after version 2.2.25.

There hasn't been new 2.2 version since this summer. This one is thus quite
huge and flush the pipe. Here are issues fixed in this release:

 * 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.

 * There was an issue with the init sequence of tcp sink from a ring. The
   sink initialization was performed too early and some parts were not
   properly initialized, especially for SSL, causing crashes at runtime.

 * It was possible to trigger the watchdog because of an extreme contention
   on the proxy's lock while the libc was in malloc()/free(). It was mainly
   due to the errors capture. A call to free() was under the lock with no
   special reason. The object is now released outside of the proxy's lock.

 * 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.

 * 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.

 * A bug in resolvers was fixed. It was possible to experience a crash
   because of a use-after-free when a resolution was released. When a
   resolution was aborted, it was not removed from the tree referencing all
   pending requests. Thus it was still possible to get a reference on a
   resolution in the same time it was released.

 * There was a logic bug in processing of option http-restrict-req-hdr-names
   that could cause deletion of a wrong header or a crash when facing
   multiple forbidden chars. This was reported in issue #1822, analyzed and
   fixed by Mateusz Malek.

 * An old bug in the H2 mux may cause spurious stream resets when uploading
   and downloading at the same time from the same stream, due to the window
   update frames having to be delayed when the output is full, and sent
   later after the stream ID was reset. Those using POST to servers might
   have experienced such occasional issues and might want to check for any
   improvement there. This was reported in issue #1830 and diagnosed by
   David le Blanc.

 * Tim reported in issue #1799 that upon reload, and old process that failed
   to synchronize its tables with the new one could loop for a while without
   any pause and waste a lot of CPU doing this.

 * Reloading peers could compete on the local one and slow down or block the
   replication.

 * Reloading peers could interrupt a resync in progress if the retry timer
   triggered before the end.

 * In peers, messages about unkown 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

 * Pause or resume a proxy from lua code could lead to some race because
   these operations were performed outside the proxy's lock. To fix the
   issue and prevent any trouble, the proxy's API was slightly refactored to
   be sure the proxy's lock is always acquired by low-level functions.

 * There was an undesired sharing of data between default-servers that could
   lead to double-frees concretized by crashes when checking the
   config. This was reported in issue #1804 by Fabiano Nunes.

 * There was a bug in the SPOE. In sync or pipelining modes, an unhealthy
   SPOA could led HAProxy to create a huge number of applets to process
   queued messages, slowing down all processing.

 * Characters escaping process in log messages was not correctly processing
   strings coming from sample fetches truncating the output string.

 * Agent-check could be delayed by ~200ms due to TCP QUICKACK being disabled
   by default.

 * Reading from the rings could also occasionally freeze at high rate if the
   reader had to stop due to a buffer full while the writer had already
   stopped due to a ring full.

 * A 60s delay could be experienced after stopping HAProxy. This was
   happening when a signal was received before entering the poller and
   without any activity on the process. In mworker mode, if a worker exited
   and the SIGCHLD signal was delivered at the right time to the master,
   this one could be stuck for 60s. The timeout is now set to 0 in this
   specific case.

 * An issue during 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.

 * 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.

 * Headers case adjustment in H1 is now available for TCP proxies. It was
   an issue for HTTP health-checks on backend side or for TCP connections
   upgraded to HTTP on frontend side.

Thanks everyone for your help and your contributions.

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.2/src/
   Git repository   : https://git.haproxy.org/git/haproxy-2.2.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-2.2.git
   Changelog        : https://www.haproxy.org/download/2.2/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 :
Aurelien DARRAGON (4):
      BUG/MEDIUM: proxy: ensure pause_proxy() and resume_proxy() own PROXY_LOCK
      BUG/MINOR: log: improper behavior when escaping log data
      DOC: configuration: missing 'if' in tcp-request content example
      BUG/MINOR: http_ana/txn: don't re-initialize txn and req var lists

Christopher Faulet (30):
      MINOR: peers: Use a dedicated reconnect timeout when stopping the local 
peer
      BUG/MEDIUM: peers: limit reconnect attempts of the old process on reload
      BUG/MINOR: peers: Use right channel flag to consider the peer as connected
      MINOR: server: Constify source server to copy its settings
      REORG: server: Export srv_settings_cpy() function
      BUG/MEDIUM: proxy: Perform a custom copy for default server settings
      BUG/MINOR: tcpcheck: Disable QUICKACK only if data should be sent after 
connect
      BUG/MEDIUM: spoe: Properly update streams waiting for a ACK in async mode
      BUG/MEDIUM: peers: Add connect and server timeut to peers proxy
      BUG/MEDIUM: peers: Don't use resync timer when local resync is in progress
      BUG/MEDIUM: peers: Don't start resync on reload if local peer is not 
up-to-date
      BUG/MINOR: tcpcheck: Disable QUICKACK for default tcp-check (with no rule)
      REGTESTS: http_request_buffer: Add a barrier to not mix up log messages
      BUG/MINOR: h1: Support headers case adjustment for TCP proxies
      REGTESTS: healthcheckmail: Relax matching on the healthcheck log message
      BUILD: ssl-ckch: Fix GCC warning about a if statement always true
      REGTESTS: 4be_1srv_smtpchk_httpchk_layer47errors: Return valid SMTP 
replies
      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: compression: handle rewrite errors when updating response 
headers
      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: Set port before IP address when processing SRV 
records
      BUG/MEDIUM: listener: Fix race condition when updating the global mngmt 
task
      BUILD: peers: Remove unused variables
      Revert "CI: switch to the "latest" LibreSSL"
      Revert "CI: determine actual OpenSSL version dynamically"

Emeric Brun (2):
      BUG/MEDIUM: sink: bad init sequence on tcp sink from a ring.
      BUG/MEDIUM: peers: messages about unkown tables not correctly ignored

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

Ilya Shipitsin (5):
      CI: cirrus-ci: bump FreeBSD image to 13-1
      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

Mateusz Malek (1):
      BUG/MEDIUM: http-ana: fix crash or wrong header deletion by 
http-restrict-req-hdr-names

Matthias Wirth (1):
      BUG/MINOR: signals/poller: ensure wakeup from signals

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 (2):
      BUG/MINOR: ssl: Memory leak of AUTHORITY_KEYID struct when loading issuer
      BUG/MINOR: ssl: ocsp structure not freed properly in case of error

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 (5):
      BUG/MINOR: resolvers: return the correct value in 
resolvers_finalize_config()
      DOC: configuration: do-resolve doesn't work with a port in the string
      BUG/MINOR: signals/poller: set the poller timeout to 0 when there are 
signals
      DOC: management: add forgotten "show startup-logs"
      BUG/MINOR: ssl: don't initialize the keylog callback when not required

Willy Tarreau (24):
      BUG/MINOR: ring/cli: fix a race condition between the writer and the 
reader
      BUG/MINOR: sink: fix a race condition between the writer and the reader
      BUILD: http: silence an uninitialized warning affecting gcc-5
      BUG/MEDIUM: mux-h2: do not fiddle with ->dsi to indicate demux is idle
      BUG/MEDIUM: captures: free() an error capture out of the proxy lock
      BUILD: fd: fix a build warning on the DWCAS
      SCRIPTS: announce-release: update some URLs to https
      BUILD: http_fetch: silence an uninitiialized warning with gcc-4/5/6 at -Os
      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: 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

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

--
Christopher Faulet

Reply via email to