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,<table>) -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 <w@1wt.eu>
(cherry picked from commit 69dfddcf425d77adb5ace65d1eae2504eefe9742)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 73d6c8b7185e94dc74d55bd565e3984c3292180c)
Signed-off-by: Willy Tarreau <w@1wt.eu>
diff --git a/src/stick_table.c b/src/stick_table.c
index 9dcbe59..a4863ae 100644
--- a/src/stick_table.c
+++ b/src/stick_table.c
@@ -3618,7 +3618,7 @@
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;