diff options
author | Cong Wang <xiyou.wangcong@gmail.com> | 2017-11-01 18:23:50 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-11-03 02:30:38 +0100 |
commit | ceffcc5e254b450e6159f173e4538215cebf1b59 (patch) | |
tree | e774e0c77b5f8a2979794ed08cc93b6365852114 /net/sched/act_skbmod.c | |
parent | net_sched: acquire RTNL in tc_action_net_exit() (diff) | |
download | linux-ceffcc5e254b450e6159f173e4538215cebf1b59.tar.xz linux-ceffcc5e254b450e6159f173e4538215cebf1b59.zip |
net_sched: hold netns refcnt for each action
TC actions have been destroyed asynchronously for a long time,
previously in a RCU callback and now in a workqueue. If we
don't hold a refcnt for its netns, we could use the per netns
data structure, struct tcf_idrinfo, after it has been freed by
netns workqueue.
Hold refcnt to ensure netns destroy happens after all actions
are gone.
Fixes: ddf97ccdd7cb ("net_sched: add network namespace support for tc actions")
Reported-by: Lucas Bates <lucasb@mojatatu.com>
Tested-by: Lucas Bates <lucasb@mojatatu.com>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Cc: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/act_skbmod.c')
-rw-r--r-- | net/sched/act_skbmod.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sched/act_skbmod.c b/net/sched/act_skbmod.c index b642ad3d39dd..8e12d8897d2f 100644 --- a/net/sched/act_skbmod.c +++ b/net/sched/act_skbmod.c @@ -263,7 +263,7 @@ static __net_init int skbmod_init_net(struct net *net) { struct tc_action_net *tn = net_generic(net, skbmod_net_id); - return tc_action_net_init(tn, &act_skbmod_ops); + return tc_action_net_init(tn, &act_skbmod_ops, net); } static void __net_exit skbmod_exit_net(struct net *net) |