diff options
author | Hangyu Hua <hbh25y@gmail.com> | 2022-09-23 10:00:46 +0800 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-09-26 12:40:39 -0700 |
commit | 6e23ec0ba92d426c77a73a9ccab16346e5e0ef49 (patch) | |
tree | 6d79f7e1c215272c2ca3f7b6bbad5f9c5e9f848e | |
parent | a43206156263fbaf1f2b7f96257441f331e91bb7 (diff) |
net: sched: act_ct: fix possible refcount leak in tcf_ct_init()
nf_ct_put need to be called to put the refcount got by tcf_ct_fill_params
to avoid possible refcount leak when tcf_ct_flow_table_get fails.
Fixes: c34b961a2492 ("net/sched: act_ct: Create nf flow table per zone")
Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
Link: https://lore.kernel.org/r/20220923020046.8021-1-hbh25y@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r-- | net/sched/act_ct.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c index d55afb8d14be..5950974ae8f6 100644 --- a/net/sched/act_ct.c +++ b/net/sched/act_ct.c @@ -1394,7 +1394,7 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla, err = tcf_ct_flow_table_get(net, params); if (err) - goto cleanup; + goto cleanup_params; spin_lock_bh(&c->tcf_lock); goto_ch = tcf_action_set_ctrlact(*a, parm->action, goto_ch); @@ -1409,6 +1409,9 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla, return res; +cleanup_params: + if (params->tmpl) + nf_ct_put(params->tmpl); cleanup: if (goto_ch) tcf_chain_put_by_act(goto_ch); |