Hi,

HAProxy 2.4.19 was released on 2022/09/28. It added 63 new commits
after version 2.4.18.

This release is very similar to the 2.5.9, released one week ago. There
is only a bug about resolvers, fixed in this release, but too late to be
shipped with the last 2.6 and 2.5 releases. 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.

For other bugs fixed in this release, here is a cut-pasted list from the
2.5.9 announce:

  * There was an issue with the log-forward section, where a missing
    initialization due to code duplication caused some settings from "bind"
    lines to be ignored (ssl, thread, a few such things). There was the same
    issue with ring. The sink initialization was performed too early.

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

  * Some ugly crashes saying "offset > buf->data" were reported when using
    the DNS (e.g. issue #1781), and it was found that it was using
    uninitialized fields in a structure. A pool_zalloc() was used to paper
    over it, since it's not even impossible that others fields are affected
    and that this part requires a deep breath before being dived into.

  * 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, analysed and fixed by Mateusz Malek.

  * Server-side idle connections were often left in TIME_WAIT due to an
    undesired shutdown() being performed before closing them, resulting in
    more outgoing ports being used than really necessary.

  * Aborting pipelined HTTP/1.1 transfers could sometimes result in a high
    CPU usage until the timeout stroke.

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

  * During atomic map updates of entries based on prefix length ("_ip" and
    "_beg"), if a new finer entry was added and matched an input before
    being committed, it was naturally ignored, but the lookup would continue
    with next keys without rechecking the key, possibly returning an
    incorrect match. This was reported by Miroslav in issue #1802.

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

  * The recently added assertion in fd_delete() already spotted a long
    existing bug on reload, where the FD that was used by the pipe of an
    exiting thread could be instantly reused as a socket by another thread
    and be incorrectly inserted in the table. Most of the time it remained
    unnoticed as these were mostly health checks on a reloading process, but
    since the assertion a few users started to see logs of a crash of the
    exiting process. This was reported both by Christian Ruppert in issue
    #1807 and by Cedric Paillet.

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

  * The ring section's "size" parser was too lax and would take "1M" for "1"
    without even issuing a warning... Also error messages regarding
    incorrect values would copy the input string instead of the parsed
    value, providing no way to diagnose.

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

  * Willy managed to trigger an error on reload where the old process died
    saying "t->tid >= 0 && t->tid != tid". This is caused by the deinit code
    that needs to stop stuff initialized on other threads, and as such it
    violates some consistency checks. The check was relaxed to ignore the
    stopping condition.

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

  * Using HAProxy built with PCRE2_JIT with a lib built without would fail
    to match. Now it will fall back to the regular match.

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

  * In Lua, it was possible to hand reading HTTP payload (by line or not)
    from an HTTP applet because we relied on a transiant HTX flags to detect
    the end of the message instead of relying on the channel flag.

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

  * In master-worker mode, it was reported that HAProxy was consuming too
    much memory because of a too high maxconn value. To limit memory
    consumption, the master is now using a default maxconn value in
    wait-mode.

  * In HTTP/1.1, the matching between the authority and the Host header value
    for CONNECT requests was buggy. An exact match was performed ignoring any
    normalization on the port. For CONNECT request the authority must contain
    the port but it may be omitted from the host header value for default
    ports (80 or 443). The matching was fixed to properly handle this case.

The following improvements were also backported:

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

  * The stats applet was reported paused frontends as OPEN. Now, these
    frontends are reported as PAUSED.

  * Encrypted password in Userlists are now supported on NetBSD

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.4/src/
   Git repository   : https://git.haproxy.org/git/haproxy-2.4.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-2.4.git
   Changelog        : https://www.haproxy.org/download/2.4/src/CHANGELOG
   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
      MINOR: listener: small API change
      BUG/MINOR: stats: fixing stat shows disabled frontend status as 'OPEN'
      BUG/MINOR: log: improper behavior when escaping log data

Brad Smith (1):
      BUILD: makefile: enable crypt(3) for NetBSD

Christopher Faulet (25):
      MINOR: http: Add function to get port part of a host
      MINOR: http: Add function to detect default port
      BUG/MEDIUM: h1: Improve authority validation for CONNCET request
      MINOR: http-htx: Use new HTTP functions for the scheme based normalization
      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
      BUG/MEDIUM: dns: Properly initialize new DNS session
      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
      REGTESTS: Fix prometheus script to perform HTTP health-checks
      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: hlua: Rely on CF_EOI to detect end of message in HTTP applets
      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: regex: Properly handle PCRE2 lib compiled without JIT support
      BUG/MINOR: h1: Support headers case adjustment for TCP proxies
      REGTESTS: healthcheckmail: Relax matching on the healthcheck log message
      REGTESTS: 4be_1srv_smtpchk_httpchk_layer47errors: Return valid SMTP 
replies
      BUG/MEDIUM: resolvers: Remove aborted resolutions from query_ids tree

Emeric Brun (3):
      BUG/MAJOR: log-forward: Fix log-forward proxies not fully initialized
      BUG/MAJOR: mworker: fix infinite loop on master with no proxies.
      BUG/MEDIUM: sink: bad init sequence on tcp sink from a ring.

Ilya Shipitsin (1):
      CI: cirrus-ci: bump FreeBSD image to 13-1

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

Mathias Weiersmueller (1):
      DOC: fix TOC in starter guide for subsection 3.3.8. Statistics

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

William Lallemand (6):
      BUG/MEDIUM: mworker: use default maxconn in wait mode
      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
      REGTESTS: log: test the log-forward feature
      REGTESTS: ssl/log: test the log-forward with SSL

Willy Tarreau (20):
      MINOR: ebtree: add ebmb_lookup_shorter() to pursue lookups
      BUG/MEDIUM: pattern: only visit equivalent nodes when skipping versions
      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: cfgparse: always defined _GNU_SOURCE for sched.h and crypt.h
      BUG/MEDIUM: poller: use fd_delete() to release the poller pipes
      BUG/MEDIUM: task: relax one thread consistency check in task_unlink_wq()
      BUILD: debug: silence warning on gcc-5
      BUG/MEDIUM: ring: fix too lax 'size' parser
      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: mux-h1: do not refrain from signaling errors after end of 
input
      BUG/MEDIUM: mux-h1: always use RST to kill idle connections in pools
      BUG/MINOR: mux-h2: fix the "show fd" dest buffer for the subscriber
      BUG/MINOR: mux-h1: fix the "show fd" dest buffer for the subscriber
      BUG/MINOR: mux-fcgi: fix the "show fd" dest buffer for the subscriber
      BUG/MINOR: task: always reset a new tasklet's call date
      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

--
Christopher Faulet

Reply via email to