net_sched: fix a regression in tc actions
authorWANG Cong <xiyou.wangcong@gmail.com>
Fri, 20 Dec 2013 08:08:51 +0000 (00:08 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Dec 2013 22:06:27 +0000 (17:06 -0500)
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: Eric Dumazet <eric.dumazet@gmail.com>
Fixes: 369ba56787d7469c0afd ("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: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/act_csum.c
net/sched/act_gact.c
net/sched/act_ipt.c
net/sched/act_mirred.c
net/sched/act_nat.c
net/sched/act_pedit.c
net/sched/act_police.c
net/sched/act_simple.c
net/sched/act_skbedit.c

index 5d350c57af3f2e24da0b48643613024382544ea4..9cc6717c5f19d9482c4857ce82c49d76fe808f3c 100644 (file)
@@ -586,7 +586,7 @@ MODULE_LICENSE("GPL");
 
 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)
                return err;
 
index 1e6e0e76524355f133ba1ae983d59d7b7b7e7dfc..dea927343bf4c7944ffcf43e86347a4dddda1e34 100644 (file)
@@ -208,7 +208,7 @@ MODULE_LICENSE("GPL");
 
 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)
                return err;
 #ifdef CONFIG_GACT_PROB
index 8344380ebaf1379a5d90d655c8ef8e0ee31e7555..e13ecbbfe8c48fbcd2c78562e4329f49bc068412 100644 (file)
@@ -314,7 +314,7 @@ MODULE_ALIAS("act_xt");
 static int __init ipt_init_module(void)
 {
        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)
                return err;
 
index 199fc9838af34022517996ed93fe182078412adb..9dbb8cd64cb00114d503f9c497fa548ff6de4043 100644 (file)
@@ -276,7 +276,7 @@ static int __init mirred_init_module(void)
        if (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) {
                unregister_netdevice_notifier(&mirred_device_notifier);
                return err;
@@ -287,9 +287,9 @@ static int __init mirred_init_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_hashinfo_destroy(&mirred_hash_info);
+       unregister_netdevice_notifier(&mirred_device_notifier);
 }
 
 module_init(mirred_init_module);
index 409fe7181c5fdaead8b868afaa769134f0d8bed1..921fea43fca2eaa7771bdcbef505438154b131b3 100644 (file)
@@ -310,7 +310,7 @@ MODULE_LICENSE("GPL");
 
 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)
                return err;
        return tcf_register_action(&act_nat_ops);
index aa5347c1b9f179190e69c33558b0913c73e49be4..e2520e90a10d88f5ccf12d4a0ebb3d431fee9c3b 100644 (file)
@@ -246,7 +246,7 @@ MODULE_LICENSE("GPL");
 
 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)
                return err;
        return tcf_register_action(&act_pedit_ops);
index 7b23ab07c6cc19bfb3d3fa0e028f50bbda3cdbc8..819a9a4d19871b2ecccdcd73962b73c7a68241b5 100644 (file)
@@ -396,7 +396,7 @@ static struct tc_action_ops act_police_ops = {
 static int __init
 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)
                return err;
        err = tcf_register_action(&act_police_ops);
index 2d7a0eb11c6935f20c89be58da18d4871dfa0bbf..81aebc162e5c1a7d942907a9e0f4e435fffea459 100644 (file)
@@ -203,7 +203,7 @@ MODULE_LICENSE("GPL");
 static int __init simp_init_module(void)
 {
        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)
                return err;
 
index 90ed04a83cf30d0f51b7b65562825a43d7c99d66..aa0a4c056f31d41347f6589ca2c3fcd4061a62fa 100644 (file)
@@ -203,7 +203,7 @@ MODULE_LICENSE("GPL");
 
 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)
                return err;
        return tcf_register_action(&act_skbedit_ops);