session: fix session_table_get_or_alloc

Extending the fib_index_to_table_index could leave entries uninitialized,
pointing to the session tables at index 0. That session index exists by
default, but it is a IPv4 session table. That would break all IPv6 on
the unitilized fib indexes.

Type: fix

Change-Id: Ie3f0a87a7f829ceb39f75ec06658b0ad1d3813ae
Signed-off-by: Andreas Schultz <andreas.schultz@travelping.com>
(cherry picked from commit 30a28c187b0eb9216d5d7918712d98a4b7a5ba6a)
This commit is contained in:
Andreas Schultz 2020-04-23 10:41:50 +02:00 committed by Andrew Yourtchenko
parent b72e494f39
commit b7bbd6a1fe

View File

@ -156,25 +156,28 @@ make_v6_ss_kv_from_tc (session_kv6_t * kv, transport_connection_t * tc)
}
static session_table_t *
session_table_get_or_alloc (u8 fib_proto, u8 fib_index)
session_table_get_or_alloc (u8 fib_proto, u32 fib_index)
{
session_table_t *st;
u32 table_index;
if (vec_len (fib_index_to_table_index[fib_proto]) <= fib_index)
ASSERT (fib_index != ~0);
if (vec_len (fib_index_to_table_index[fib_proto]) > fib_index &&
fib_index_to_table_index[fib_proto][fib_index] != ~0)
{
table_index = fib_index_to_table_index[fib_proto][fib_index];
return session_table_get (table_index);
}
else
{
st = session_table_alloc ();
table_index = session_table_index (st);
vec_validate (fib_index_to_table_index[fib_proto], fib_index);
vec_validate_init_empty (fib_index_to_table_index[fib_proto], fib_index,
~0);
fib_index_to_table_index[fib_proto][fib_index] = table_index;
st->active_fib_proto = fib_proto;
session_table_init (st, fib_proto);
return st;
}
else
{
table_index = fib_index_to_table_index[fib_proto][fib_index];
return session_table_get (table_index);
}
}
static session_table_t *