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 7ff0871..544c22f 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 ef41a10..8988cb8 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;