net_sched: fix a resource leak in tcindex_set_parms()
Jakub noticed there is a potential resource leak in
tcindex_set_parms(): when tcindex_filter_result_init() fails
and it jumps to 'errout1' which doesn't release the memory
and resources allocated by tcindex_alloc_perfect_hash().
We should just jump to 'errout_alloc' which calls
tcindex_free_perfect_hash().
Fixes: b9a24bb76b
("net_sched: properly handle failure case of tcf_exts_init()")
Reported-by: Jakub Kicinski <kuba@kernel.org>
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>
This commit is contained in:
parent
2c22c06ce4
commit
52b5ae501c
|
@ -365,7 +365,7 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
|
||||||
|
|
||||||
err = tcindex_filter_result_init(&new_filter_result, net);
|
err = tcindex_filter_result_init(&new_filter_result, net);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto errout1;
|
goto errout_alloc;
|
||||||
if (old_r)
|
if (old_r)
|
||||||
cr = r->res;
|
cr = r->res;
|
||||||
|
|
||||||
|
@ -484,7 +484,6 @@ errout_alloc:
|
||||||
tcindex_free_perfect_hash(cp);
|
tcindex_free_perfect_hash(cp);
|
||||||
else if (balloc == 2)
|
else if (balloc == 2)
|
||||||
kfree(cp->h);
|
kfree(cp->h);
|
||||||
errout1:
|
|
||||||
tcf_exts_destroy(&new_filter_result.exts);
|
tcf_exts_destroy(&new_filter_result.exts);
|
||||||
errout:
|
errout:
|
||||||
kfree(cp);
|
kfree(cp);
|
||||||
|
|
Loading…
Reference in New Issue