]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
sched: act_ct: add netns into the key of tcf_ct_flow_table
authorXin Long <lucien.xin@gmail.com>
Sat, 15 Jun 2024 21:47:30 +0000 (17:47 -0400)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 18 Jun 2024 13:24:24 +0000 (15:24 +0200)
commit88c67aeb14070bab61d3dd8be96c8b42ebcaf53a
tree945087f767f0ff715d1b27ab00f68760c9343480
parent2ebe8f840c7450ecbfca9d18ac92e9ce9155e269
sched: act_ct: add netns into the key of tcf_ct_flow_table

zones_ht is a global hashtable for flow_table with zone as key. However,
it does not consider netns when getting a flow_table from zones_ht in
tcf_ct_init(), and it means an act_ct action in netns A may get a
flow_table that belongs to netns B if it has the same zone value.

In Shuang's test with the TOPO:

  tcf2_c <---> tcf2_sw1 <---> tcf2_sw2 <---> tcf2_s

tcf2_sw1 and tcf2_sw2 saw the same flow and used the same flow table,
which caused their ct entries entering unexpected states and the
TCP connection not able to end normally.

This patch fixes the issue simply by adding netns into the key of
tcf_ct_flow_table so that an act_ct action gets a flow_table that
belongs to its own netns in tcf_ct_init().

Note that for easy coding we don't use tcf_ct_flow_table.nf_ft.net,
as the ct_ft is initialized after inserting it to the hashtable in
tcf_ct_flow_table_get() and also it requires to implement several
functions in rhashtable_params including hashfn, obj_hashfn and
obj_cmpfn.

Fixes: 64ff70b80fd4 ("net/sched: act_ct: Offload established connections to flow table")
Reported-by: Shuang Li <shuali@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/1db5b6cc6902c5fc6f8c6cbd85494a2008087be5.1718488050.git.lucien.xin@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/sched/act_ct.c