[NETFILTER]: nf_conntrack: Fix module refcount dropping too far
authorYasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp>
Tue, 25 Apr 2006 00:15:17 +0000 (17:15 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Tue, 25 Apr 2006 00:27:28 +0000 (17:27 -0700)
If nf_ct_l3proto_find_get() fails to get the refcount of
nf_ct_l3proto_generic, nf_ct_l3proto_put() will drop the refcount
too far.

This gets rid of '.me = THIS_MODULE' of nf_ct_l3proto_generic so that
nf_ct_l3proto_find_get() doesn't try to get refcount of it.
It's OK because its symbol is usable until nf_conntrack.ko is unloaded.

This also kills unnecessary NULL pointer check as well.
__nf_ct_proto_find() allways returns non-NULL pointer.

Signed-off-by: Yasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netfilter/nf_conntrack_core.c
net/netfilter/nf_conntrack_l3proto_generic.c

index e581190fb6c374ff691679e780dffeec6c213cd3..e3022226a4084bdea58eea7b91c15719bbe6aa9f 100644 (file)
@@ -208,10 +208,8 @@ nf_ct_proto_find_get(u_int16_t l3proto, u_int8_t protocol)
 
        preempt_disable();
        p = __nf_ct_proto_find(l3proto, protocol);
-       if (p) {
-               if (!try_module_get(p->me))
-                       p = &nf_conntrack_generic_protocol;
-       }
+       if (!try_module_get(p->me))
+               p = &nf_conntrack_generic_protocol;
        preempt_enable();
        
        return p;
@@ -229,10 +227,8 @@ nf_ct_l3proto_find_get(u_int16_t l3proto)
 
        preempt_disable();
        p = __nf_ct_l3proto_find(l3proto);
-       if (p) {
-               if (!try_module_get(p->me))
-                       p = &nf_conntrack_generic_l3proto;
-       }
+       if (!try_module_get(p->me))
+               p = &nf_conntrack_generic_l3proto;
        preempt_enable();
 
        return p;
index 7de4f06c63c5f211945fbce29fbf5ec1b1c89f74..3fc58e454d4e2b94bf1ac2da40762095d212680e 100644 (file)
@@ -94,5 +94,4 @@ struct nf_conntrack_l3proto nf_conntrack_generic_l3proto = {
        .print_conntrack = generic_print_conntrack,
        .prepare         = generic_prepare,
        .get_features    = generic_get_features,
-       .me              = THIS_MODULE,
 };