diff options
author | Cong Wang <xiyou.wangcong@gmail.com> | 2020-09-22 20:56:23 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-09-24 19:46:21 -0700 |
commit | e49d8c22f1261c43a986a7fdbf677ac309682a07 (patch) | |
tree | 83b54bf6cd0eb7356401571e0ff6533fd2bfffda /net/sched/act_ipt.c | |
parent | 7241c5a697479c7d0c5a96595822cdab750d41ae (diff) | |
download | linux-e49d8c22f1261c43a986a7fdbf677ac309682a07.tar.gz linux-e49d8c22f1261c43a986a7fdbf677ac309682a07.tar.bz2 linux-e49d8c22f1261c43a986a7fdbf677ac309682a07.zip |
net_sched: defer tcf_idr_insert() in tcf_action_init_1()
All TC actions call tcf_idr_insert() for new action at the end
of their ->init(), so we can actually move it to a central place
in tcf_action_init_1().
And once the action is inserted into the global IDR, other parallel
process could free it immediately as its refcnt is still 1, so we can
not fail after this, we need to move it after the goto action
validation to avoid handling the failure case after insertion.
This is found during code review, is not directly triggered by syzbot.
And this prepares for the next patch.
Cc: Vlad Buslov <vladbu@mellanox.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_ipt.c')
-rw-r--r-- | net/sched/act_ipt.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c index 400a2cfe8452..8dc3bec0d325 100644 --- a/net/sched/act_ipt.c +++ b/net/sched/act_ipt.c @@ -189,8 +189,6 @@ static int __tcf_ipt_init(struct net *net, unsigned int id, struct nlattr *nla, ipt->tcfi_t = t; ipt->tcfi_hook = hook; spin_unlock_bh(&ipt->tcf_lock); - if (ret == ACT_P_CREATED) - tcf_idr_insert(tn, *a); return ret; err3: |