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:
parent
b72e494f39
commit
b7bbd6a1fe
@ -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 *
|
||||
|
Loading…
x
Reference in New Issue
Block a user