]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MINOR: guid/server: ensure thread-safety on GUID insert/delete
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 7 Nov 2024 10:08:40 +0000 (11:08 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 7 Nov 2024 17:17:03 +0000 (18:17 +0100)
commit8e0e7d9d1af5b2dfec2e625d2c19dd034c36eb04
treeb77f18e3e3393c49b8a5fa9c8401665087992d5a
parentb70880cdc9c01602197fd124c84ab264f6b4ddfb
BUG/MINOR: guid/server: ensure thread-safety on GUID insert/delete

Since 3.0, it is possible to assign a GUID to proxies, listeners and
servers. These objects are stored in a global tree guid_tree.

Proxies and listeners are static. However, servers may be added or
deleted at runtime, which imply that guid_tree must be protected. Fix
this by declaring a read-write lock to protect tree access.

For now, only guid_insert() and guid_remove() are protected using a
write lock. Outside of these, GUID tree is not accessed at runtime. If
server CLI commands are extended to support GUID as server identifier,
lookup operation should be extended with a read lock protection.

Note that during stat-file preloading, GUID tree is accessed for lookup.
However, as it is performed on startup which is single threaded, there
is no need for lock here. A BUG_ON() has been added to ensure this
precondition remains true.

This bug could caused a segfault when using dynamic servers with GUID.
However, it was never reproduced for now.

This must be backported up to 3.0. To avoid a conflict issue, the
previous cleanup patch can be merged before it.
include/haproxy/guid.h
include/haproxy/thread-t.h
src/guid.c
src/thread.c