Commit e1bbdebd authored by Yasuyuki Kozakai's avatar Yasuyuki Kozakai Committed by David S. Miller

[NETFILTER]: nf_conntrack: Fix module refcount dropping too far

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: default avatarYasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp>
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d8fe3f19
...@@ -208,10 +208,8 @@ nf_ct_proto_find_get(u_int16_t l3proto, u_int8_t protocol) ...@@ -208,10 +208,8 @@ nf_ct_proto_find_get(u_int16_t l3proto, u_int8_t protocol)
preempt_disable(); preempt_disable();
p = __nf_ct_proto_find(l3proto, protocol); p = __nf_ct_proto_find(l3proto, protocol);
if (p) { if (!try_module_get(p->me))
if (!try_module_get(p->me)) p = &nf_conntrack_generic_protocol;
p = &nf_conntrack_generic_protocol;
}
preempt_enable(); preempt_enable();
return p; return p;
...@@ -229,10 +227,8 @@ nf_ct_l3proto_find_get(u_int16_t l3proto) ...@@ -229,10 +227,8 @@ nf_ct_l3proto_find_get(u_int16_t l3proto)
preempt_disable(); preempt_disable();
p = __nf_ct_l3proto_find(l3proto); p = __nf_ct_l3proto_find(l3proto);
if (p) { if (!try_module_get(p->me))
if (!try_module_get(p->me)) p = &nf_conntrack_generic_l3proto;
p = &nf_conntrack_generic_l3proto;
}
preempt_enable(); preempt_enable();
return p; return p;
......
...@@ -94,5 +94,4 @@ struct nf_conntrack_l3proto nf_conntrack_generic_l3proto = { ...@@ -94,5 +94,4 @@ struct nf_conntrack_l3proto nf_conntrack_generic_l3proto = {
.print_conntrack = generic_print_conntrack, .print_conntrack = generic_print_conntrack,
.prepare = generic_prepare, .prepare = generic_prepare,
.get_features = generic_get_features, .get_features = generic_get_features,
.me = THIS_MODULE,
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment