]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MINOR: server/dns: use server_set_inetaddr() to unset srv addr from DNS
authorAurelien DARRAGON <adarragon@haproxy.com>
Mon, 11 Dec 2023 16:31:31 +0000 (17:31 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 21 Dec 2023 13:22:27 +0000 (14:22 +0100)
commit64c9c8ef3985bee02213e0726711e7893f5ce71f
tree2a13a16baf1cfd2f7382b50cc25c9c6f2a454e2b
parent334ebfa1a2c7184b8c9b9e2732dec1d61f8a1d92
BUG/MINOR: server/dns: use server_set_inetaddr() to unset srv addr from DNS

As seen before, server's addr and svc_port should not be updated directly
during runtime, because even if the update is performed under the lock,
some competing threads might be reading ->addr and ->svc_port without
the lock because they simply cannot afford it.

To prevent races with such competing threads, server's addr and port
should only be updated using server_set_inetaddr() function or similar.

This patch depends on:
 - "MINOR: server: ensure connection cleanup on server addr changes"
 - "CLEANUP: server/event_hdl: remove purge_conn hint in INETADDR event"
 - "MEDIUM: server: merge srv_update_addr() and srv_update_addr_port() logic"
 - "MEDIUM: server: make server_set_inetaddr() updater serializable"
 - "MINOR: server/event_hdl: expose updater info through INETADDR event"
 - "MINOR: server: add dns hint in server_inetaddr_updater struct"
 - "MEDIUM: server/dns: clear RMAINT when addr resolves again"

While it could be backported in 2.9 with cd994407a ("BUG/MAJOR:
server/addr: fix a race during server addr:svc_port updates") to ensure
addr and svc_port reset performed by resolver's code comply with the
API taking care of pushing the update (and thus avoid any race), some
patch dependencies are quite sensitive so it's probably best to avoid
backporting for no good reason, or at least wait for it to be considered
stable to prevent any breakeages.
src/resolvers.c
src/server.c