BUG/MEDIUM: stick-table: fix regression caused by recent fix for out-of-memory
Commit ef8f4fe ("BUG/MINOR: stick-table: handle out-of-memory condition
gracefully") unfortunately got trapped by a pointer operation. Replacing
ts = poll_alloc() + size;
with :
ts = poll_alloc();
ts += size;
Doesn't give the same result because pool_alloc() is void while ts is a
struct stksess*. So now we don't access the same places, which is visible
in certain stick-table scenarios causing a crash.
This must be backported to 1.6 and 1.5.
(cherry picked from commit 5179146fa35a74c46a4bf4bcd58c97696edc9810)
(cherry picked from commit d4ea82cdf51149aa0edad86b5b959527ad82bdcd)
diff --git a/src/stick_table.c b/src/stick_table.c
index c77b402..2ab56fd 100644
--- a/src/stick_table.c
+++ b/src/stick_table.c
@@ -170,7 +170,7 @@
ts = pool_alloc2(t->pool);
if (ts) {
t->current++;
- ts += t->data_size;
+ ts = (void *)ts + t->data_size;
stksess_init(t, ts);
if (key)
stksess_setkey(t, ts, key);