]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: server: always initialize pp_tlvs for default servers
authorWilly Tarreau <w@1wt.eu>
Mon, 13 Nov 2023 07:46:51 +0000 (08:46 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 13 Nov 2023 07:53:28 +0000 (08:53 +0100)
In commit 6f4bfed3a ("MINOR: server: Add parser support for
set-proxy-v2-tlv-fmt") a suspicious check for a NULL srv_tlv was placed
in the list_for_each_entry(), that should not be needed. In practice,
it's caused by the list head not being initialized, hence the first
element is NULL, as shown by Alexander's reproducer below which crashes
if the test in the loop is removed:

  backend dummy
    default-server send-proxy-v2 set-proxy-v2-tlv-fmt(0xE1) %[fc_pp_tlv(0xE1)]
    server dummy_server 127.0.0.1:2319

The right place to initialize this field is proxy_preset_defaults().
We'd really need a function to initialize a server :-/

The check in the loop was removed. No backport is needed.

src/proxy.c
src/server.c

index 7ff087190324c6795753fe1c44fd5df7109721e4..544c22f826987a63e18ae5e8e3946cddd7f3bb19 100644 (file)
@@ -1469,6 +1469,7 @@ void proxy_preset_defaults(struct proxy *defproxy)
        defproxy->defsrv.onerror = DEF_HANA_ONERR;
        defproxy->defsrv.consecutive_errors_limit = DEF_HANA_ERRLIMIT;
        defproxy->defsrv.uweight = defproxy->defsrv.iweight = 1;
+       LIST_INIT(&defproxy->defsrv.pp_tlvs);
 
        defproxy->email_alert.level = LOG_ALERT;
        defproxy->load_server_state_from_file = PR_SRV_STATE_FILE_UNSPEC;
index ef41a109a2808c328f5f812df22918a1e8bdf4b3..8988cb8be90aa0a69d83bd88c68c1ded7ac3a673 100644 (file)
@@ -2514,8 +2514,6 @@ void srv_settings_cpy(struct server *srv, const struct server *src, int srv_tmpl
        LIST_INIT(&srv->pp_tlvs);
 
        list_for_each_entry(srv_tlv, &src->pp_tlvs, list) {
-               if (srv_tlv == NULL)
-                       break;
                new_srv_tlv = malloc(sizeof(*new_srv_tlv));
                if (unlikely(!new_srv_tlv)) {
                        break;