On Sat, Aug 5, 2017 at 1:48 AM, Xin Long <lucien....@gmail.com> wrote: > -static int __tcf_ipt_init(struct tc_action_net *tn, struct nlattr *nla, > +static int __tcf_ipt_init(struct net *net, struct nlattr *nla, > struct nlattr *est, struct tc_action **a, > const struct tc_action_ops *ops, int ovr, int bind) > { > + struct tc_action_net *tn = net_generic(net, xt_net_id);
... > @@ -193,18 +195,14 @@ static int tcf_ipt_init(struct net *net, struct nlattr > *nla, > struct nlattr *est, struct tc_action **a, int ovr, > int bind) > { > - struct tc_action_net *tn = net_generic(net, ipt_net_id); > - > - return __tcf_ipt_init(tn, nla, est, a, &act_ipt_ops, ovr, bind); > + return __tcf_ipt_init(net, nla, est, a, &act_ipt_ops, ovr, bind); > } > > static int tcf_xt_init(struct net *net, struct nlattr *nla, > struct nlattr *est, struct tc_action **a, int ovr, > int bind) > { > - struct tc_action_net *tn = net_generic(net, xt_net_id); > - > - return __tcf_ipt_init(tn, nla, est, a, &act_xt_ops, ovr, bind); > + return __tcf_ipt_init(net, nla, est, a, &act_xt_ops, ovr, bind); This is not correct. You miss ipt_net_id != xt_net_id.