From 69dfddcf425d77adb5ace65d1eae2504eefe9742 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Thu, 18 Jul 2024 14:48:55 +0200 Subject: [PATCH] BUG/MINOR: stick-table: fix crash for src_inc_gpc() without stkcounter Since 2.5, an array of GPC is provided to replace legacy gpc0/gpc1. src_inc_gpc is a sample fetch which is used to increment counters in this array. A crash occurs if src_inc_gpc is used without any previous track-sc rule. This is caused by an error in smp_fetch_sc_inc_gpc(). When temporary stick counter is created via smp_create_src_stkctr(), table pointer arg value used is not correct : it points to the counter ID instead of the table argument. To fix this, use the proper sample fetch second arg. This can be reproduced with the following config : acl mark src_inc_gpc(0,) -m bool tcp-request connection accept if mark This should be backported up to 2.6. (cherry picked from commit ea7ea5198a0ed9352f88425c884e6437ecc9ebdc) Signed-off-by: Willy Tarreau --- src/stick_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stick_table.c b/src/stick_table.c index 4487ee4f0..89867c283 100644 --- a/src/stick_table.c +++ b/src/stick_table.c @@ -3963,7 +3963,7 @@ smp_fetch_sc_inc_gpc(const struct arg *args, struct sample *smp, const char *kw, smp->data.u.sint = 0; if (!stkctr_entry(stkctr)) - stkctr = smp_create_src_stkctr(smp->sess, smp->strm, args, kw, &tmpstkctr); + stkctr = smp_create_src_stkctr(smp->sess, smp->strm, args + 1, kw, &tmpstkctr); if (stkctr && stkctr_entry(stkctr)) { void *ptr1,*ptr2;