提交 568a153a 编写于 作者: W WANG Cong 提交者: David S. Miller

net_sched: fix a regression in tc actions

This patch fixes:
1) pass mask rather than size to tcf_hashinfo_init()
2) the cleanup should be in reversed order in mirred_cleanup_module()
Reported-by: NEric Dumazet <eric.dumazet@gmail.com>
Fixes: 369ba567 ("net_sched: init struct tcf_hashinfo at register time")
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: NCong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: NJamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 852ad5e6
...@@ -586,7 +586,7 @@ MODULE_LICENSE("GPL"); ...@@ -586,7 +586,7 @@ MODULE_LICENSE("GPL");
static int __init csum_init_module(void) static int __init csum_init_module(void)
{ {
int err = tcf_hashinfo_init(&csum_hash_info, CSUM_TAB_MASK+1); int err = tcf_hashinfo_init(&csum_hash_info, CSUM_TAB_MASK);
if (err) if (err)
return err; return err;
......
...@@ -208,7 +208,7 @@ MODULE_LICENSE("GPL"); ...@@ -208,7 +208,7 @@ MODULE_LICENSE("GPL");
static int __init gact_init_module(void) static int __init gact_init_module(void)
{ {
int err = tcf_hashinfo_init(&gact_hash_info, GACT_TAB_MASK+1); int err = tcf_hashinfo_init(&gact_hash_info, GACT_TAB_MASK);
if (err) if (err)
return err; return err;
#ifdef CONFIG_GACT_PROB #ifdef CONFIG_GACT_PROB
......
...@@ -314,7 +314,7 @@ MODULE_ALIAS("act_xt"); ...@@ -314,7 +314,7 @@ MODULE_ALIAS("act_xt");
static int __init ipt_init_module(void) static int __init ipt_init_module(void)
{ {
int ret1, ret2, err; int ret1, ret2, err;
err = tcf_hashinfo_init(&ipt_hash_info, IPT_TAB_MASK+1); err = tcf_hashinfo_init(&ipt_hash_info, IPT_TAB_MASK);
if (err) if (err)
return err; return err;
......
...@@ -276,7 +276,7 @@ static int __init mirred_init_module(void) ...@@ -276,7 +276,7 @@ static int __init mirred_init_module(void)
if (err) if (err)
return err; return err;
err = tcf_hashinfo_init(&mirred_hash_info, MIRRED_TAB_MASK+1); err = tcf_hashinfo_init(&mirred_hash_info, MIRRED_TAB_MASK);
if (err) { if (err) {
unregister_netdevice_notifier(&mirred_device_notifier); unregister_netdevice_notifier(&mirred_device_notifier);
return err; return err;
...@@ -287,9 +287,9 @@ static int __init mirred_init_module(void) ...@@ -287,9 +287,9 @@ static int __init mirred_init_module(void)
static void __exit mirred_cleanup_module(void) static void __exit mirred_cleanup_module(void)
{ {
unregister_netdevice_notifier(&mirred_device_notifier);
tcf_hashinfo_destroy(&mirred_hash_info);
tcf_unregister_action(&act_mirred_ops); tcf_unregister_action(&act_mirred_ops);
tcf_hashinfo_destroy(&mirred_hash_info);
unregister_netdevice_notifier(&mirred_device_notifier);
} }
module_init(mirred_init_module); module_init(mirred_init_module);
......
...@@ -310,7 +310,7 @@ MODULE_LICENSE("GPL"); ...@@ -310,7 +310,7 @@ MODULE_LICENSE("GPL");
static int __init nat_init_module(void) static int __init nat_init_module(void)
{ {
int err = tcf_hashinfo_init(&nat_hash_info, NAT_TAB_MASK+1); int err = tcf_hashinfo_init(&nat_hash_info, NAT_TAB_MASK);
if (err) if (err)
return err; return err;
return tcf_register_action(&act_nat_ops); return tcf_register_action(&act_nat_ops);
......
...@@ -246,7 +246,7 @@ MODULE_LICENSE("GPL"); ...@@ -246,7 +246,7 @@ MODULE_LICENSE("GPL");
static int __init pedit_init_module(void) static int __init pedit_init_module(void)
{ {
int err = tcf_hashinfo_init(&pedit_hash_info, PEDIT_TAB_MASK+1); int err = tcf_hashinfo_init(&pedit_hash_info, PEDIT_TAB_MASK);
if (err) if (err)
return err; return err;
return tcf_register_action(&act_pedit_ops); return tcf_register_action(&act_pedit_ops);
......
...@@ -396,7 +396,7 @@ static struct tc_action_ops act_police_ops = { ...@@ -396,7 +396,7 @@ static struct tc_action_ops act_police_ops = {
static int __init static int __init
police_init_module(void) police_init_module(void)
{ {
int err = tcf_hashinfo_init(&police_hash_info, POL_TAB_MASK+1); int err = tcf_hashinfo_init(&police_hash_info, POL_TAB_MASK);
if (err) if (err)
return err; return err;
err = tcf_register_action(&act_police_ops); err = tcf_register_action(&act_police_ops);
......
...@@ -203,7 +203,7 @@ MODULE_LICENSE("GPL"); ...@@ -203,7 +203,7 @@ MODULE_LICENSE("GPL");
static int __init simp_init_module(void) static int __init simp_init_module(void)
{ {
int err, ret; int err, ret;
err = tcf_hashinfo_init(&simp_hash_info, SIMP_TAB_MASK+1); err = tcf_hashinfo_init(&simp_hash_info, SIMP_TAB_MASK);
if (err) if (err)
return err; return err;
......
...@@ -203,7 +203,7 @@ MODULE_LICENSE("GPL"); ...@@ -203,7 +203,7 @@ MODULE_LICENSE("GPL");
static int __init skbedit_init_module(void) static int __init skbedit_init_module(void)
{ {
int err = tcf_hashinfo_init(&skbedit_hash_info, SKBEDIT_TAB_MASK+1); int err = tcf_hashinfo_init(&skbedit_hash_info, SKBEDIT_TAB_MASK);
if (err) if (err)
return err; return err;
return tcf_register_action(&act_skbedit_ops); return tcf_register_action(&act_skbedit_ops);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册