]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: stick-tables: fix ref counter in table entry using multiple http tracksc.
authorEmeric Brun <ebrun@haproxy.com>
Wed, 10 Mar 2021 15:58:03 +0000 (16:58 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 11 Mar 2021 13:14:44 +0000 (14:14 +0100)
Setting multiple http-request track-scX rules generates entries
which never expires.

If there was already an entry registered by a previous http rule
'stream_track_stkctr(&s->stkctr[rule->action], t, ts)' didn't
register the new 'ts' into the stkctr. And function is left
with no reference on 'ts' whereas refcount had been increased
by the '_get_entry'

The patch applies the same policy as the one showed on tcp track
rules and if there is successive rules the track counter keep the
first entry registered in the counter and nothing more is computed.

After validation this should be backported in all versions.

src/http_act.c

index b4aced17c1be7dce096b2fd6719323edfdb93a03..838deb52dc6ff267be44b01205b822a787ed3fc1 100644 (file)
@@ -1784,6 +1784,10 @@ static enum act_return http_action_track_sc(struct act_rule *rule, struct proxy
        opt = ((rule->from == ACT_F_HTTP_REQ) ? SMP_OPT_DIR_REQ : SMP_OPT_DIR_RES) | SMP_OPT_FINAL;
 
        t = rule->arg.trk_ctr.table.t;
+
+       if (stkctr_entry(&s->stkctr[rule->action]))
+               goto end;
+
        key = stktable_fetch_key(t, s->be, sess, s, opt, rule->arg.trk_ctr.expr, NULL);
 
        if (!key)