Hi,

HAProxy 2.3.8 was released on 2021/03/25. It added 22 new commits
after version 2.3.7.

This version focuses on fixing a few annoying bugs that were reported on
2.3.7 and older, some of which were recent regressions.

 - Lua: Maciej hit a situation where the watchdog occasionally triggers
   while one of his threads is in the Lua's memory allocator. While this
   is particuarly strange and needs to be investigated, it had the bad
   taste of trying to dump a Lua backtrace which itself required a
   memory allocation, and used to deadlock inside the libc's allocator!
   Christopher fixed this by using a different Lua trace function that
   does not require any memory allocation.

 - a fix for a locking bug in the FD migration code unveiled an AB/BA
   situation with the listeners, that is more visible in 2.2: when
   reloading processes under a high connection rate traffic, it was
   possible for one thread to try to stop the listeners while another
   one had the listener lock, and both would wait for each other, until
   the watchdog reconciliated them the hard way. As this would require
   very high loads and would only affect the old process, I guess most
   users didn't notice, but Christopher triggered it on a reg-test and
   since then we could only see it. In 2.3 and 2.4 it will be harder to
   trigger it but it's definitely possible while resuming a temporarily
   paused listener. This was fixed with Olivier's help by deferring the
   close to the last user of the FD.

 - when I fixed the freq_ctr issue (multiple rotation and occasional
   livelock), I addressed both second-based counters and period-based
   ones. However my fix on the latter only worked for sub-second periods
   which were the ones I used in my tests :-/ The visible effect is that
   some rate counters in stick-tables averaged over more than one second
   will indefinitely grow. That's now fixed and I could verify that any
   delay now works. And I still have no idea how to reliably test rate
   counters automatically. On the other hand if we break them once every
   10 years, I'm wondering if it's really worth worrying about them :-/

 - during the backport to 2.3 of the patch to relieve the contention on
   the idle_conns_lock had significant contextual changes, and I apparently
   misplaced an unlock there that Christopher fixed.

 - when using DEBUG_UAF (to detect use-after-free), we use mmap/munmap
   to allocate/free memory. Since this can take a lot of time, the thread
   entering releases there marks itself harmless around the calls. But
   Christopher found one case where if that's done under thread_isolate()
   as happens during pool_gc(), the return back to normal operation can
   deadlock with the thread itself.

 - we were contacted by BitMEX security team and @melardev who found that
   haproxy would accept garbage after an IP address that was improperly
   formatted by their first level proxy resulting in an issue not being
   detected for a while. For example if the first layer incorrectly uses
   semi-colons instead of colons to delimit addresses, the real field
   would read "1.2.3.4; 5.6.7.8" and haproxy would return 1.2.3.4. The
   reason is that the parser was also used to parse delimited addresses
   in URLs. So now we comply more strictly to the format in RFC7239, but
   still accept a colon and a port because at least Azure's application
   gateway is documented for appending this, but we reject everything
   else. This will be easier to detect than an apparently valid address
   that does not correspond to what the first level proxy meant.

 - the log-forward section would not support forwarding from UNIX dgram
   sockets just because the protocol definition was missing! Emeric added
   it.

 - Rémi addressed an issue affecting the "add ssl crt-list" command on
   the CLI: if both a ctr-list and a ca-file were fed from the CLI, the
   openssl functions used to build them could perform FS accesses. That's
   nasty because in the unlucky case that one entry matches one present
   during, say, a config check or something like this, it would not
   necessarily work later after a chroot or a drop of privileges. Now
   these functions were adjusted to only use the in-memory API and to
   return errors directly on the CLI.

 - Ilya secured another case of OpenSSL version comparison that's more
   reliably handled by testing a macro.

 - Eric's previously mentionned fix for the unix-bind-prefix that used
   to mistakenly affect the master socket location was integrated.

I would appreciate it if those who experienced issues with latest 2.2
could give this one a try on a single server and confirm it addresses
their concerns as well, so that we're more confident in what goes into
2.2.12, probably early next week to still give some time for last issues
to be reported.

For all versions there's still an issue with ssl_sock_shutw() crashing
under certain circumstances but it was already affecting 2.0.13 a year
ago. I'm not aware of any other particular pending issue for 2.3. However
there's one report of CLOSE_WAIT on H2 with latest 2.2 that's still under
investigation. I'd prefer it if we can fix it before thee next release but
it will not hold it up in any case.

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.3/src/
   Git repository   : http://git.haproxy.org/git/haproxy-2.3.git/
   Git Web browsing : http://git.haproxy.org/?p=haproxy-2.3.git
   Changelog        : http://www.haproxy.org/download/2.3/src/CHANGELOG
   Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/

Willy
---
Complete changelog :
Christopher Faulet (7):
      BUG/MEDIUM: mux-fcgi: Fix locking of idle_conns lock in the FCGI I/O 
callback
      MEDIUM: lua: Use a per-thread counter to track some non-reentrant parts 
of lua
      BUG/MEDIUM: debug/lua: Don't dump the lua stack if not dumpable
      MINOR: lua: Slightly improve function dumping the lua traceback
      BUG/MEDIUM: debug/lua: Use internal hlua function to dump the lua 
traceback
      BUG/MEDIUM: lua: Always init the lua stack before referencing the context
      BUG/MEDIUM: thread: Fix a deadlock if an isolated thread is marked as 
harmless

Emeric Brun (1):
      BUG/MINOR: protocol: add missing support of dgram unix socket.

Eric Salama (1):
      MINOR/BUG: mworker/cli: do not use the unix_bind prefix for the master 
CLI socket

Ilya Shipitsin (1):
      BUILD: ssl: guard ecdh functions with SSL_CTX_set_tmp_ecdh macro

Olivier Houchard (1):
      BUG/MEDIUM: fd: Take the fd_mig_lock when closing if no DWCAS is 
available.

Remi Tricot-Le Breton (1):
      BUG/MINOR: ssl: Prevent disk access when using "add ssl crt-list"

Willy Tarreau (10):
      MINOR: time: export the global_now variable
      BUG/MINOR: freq_ctr/threads: make use of the last updated global time
      MINOR: time: also provide a global, monotonic global_now_ms timer
      BUG/MEDIUM: freq_ctr/threads: use the global_now_ms variable
      MINOR: fd: make fd_clr_running() return the remaining running mask
      MINOR: fd: remove the unneeded running bit from fd_insert()
      BUG/MEDIUM: fd: do not wait on FD removal in fd_delete()
      CLEANUP: fd: remove unused fd_set_running_excl()
      MINOR: tools: make url2ipv4 return the exact number of bytes parsed
      BUG/MINOR: http_fetch: make hdr_ip() reject trailing characters

---

Reply via email to