From 17bd30384cb3441d11cd65a00a3af76885288b78 Mon Sep 17 00:00:00 2001 From: Klement Sekera Date: Wed, 24 Mar 2021 17:29:23 +0100 Subject: nat: correct thread index usage Use actual thread index from hash table instead of doing calculation. Calculated index might be different and could lead to crash. Type: fix Change-Id: Iede9a67fbe541cb44eccd0d6ddf4e2c51eb35423 Signed-off-by: Klement Sekera --- src/plugins/nat/nat44-ei/nat44_ei_in2out.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/plugins/nat/nat44-ei/nat44_ei_in2out.c') diff --git a/src/plugins/nat/nat44-ei/nat44_ei_in2out.c b/src/plugins/nat/nat44-ei/nat44_ei_in2out.c index d1a962f5222..42923aa0f77 100644 --- a/src/plugins/nat/nat44-ei/nat44_ei_in2out.c +++ b/src/plugins/nat/nat44-ei/nat44_ei_in2out.c @@ -257,7 +257,12 @@ nat44_i2o_is_idle_session_cb (clib_bihash_kv_8_8_t * kv, void *arg) vec_elt_at_index (nm->per_thread_data, ctx->thread_index); clib_bihash_kv_8_8_t s_kv; - s = pool_elt_at_index (tnm->sessions, kv->value); + if (ctx->thread_index != nat_value_get_thread_index (kv)) + { + return 0; + } + + s = pool_elt_at_index (tnm->sessions, nat_value_get_session_index (kv)); sess_timeout_time = s->last_heard + (f64) nat_session_get_timeout ( &nm->timeouts, s->nat_proto, s->state); if (ctx->now >= sess_timeout_time) -- cgit 1.2.3-korg