Commit 523895e5 authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso

netfilter: cttimeout: inc/dec module refcount per object, not per use refcount

There is no need to increment the module refcount again, its enough to
obtain one reference per object, i.e. take a reference on object
creation and put it on object destruction.
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 49001a2e
...@@ -158,6 +158,7 @@ static int cttimeout_new_timeout(struct sk_buff *skb, ...@@ -158,6 +158,7 @@ static int cttimeout_new_timeout(struct sk_buff *skb,
timeout->timeout.l3num = l3num; timeout->timeout.l3num = l3num;
timeout->timeout.l4proto = l4proto; timeout->timeout.l4proto = l4proto;
refcount_set(&timeout->refcnt, 1); refcount_set(&timeout->refcnt, 1);
__module_get(THIS_MODULE);
list_add_tail_rcu(&timeout->head, &pernet->nfct_timeout_list); list_add_tail_rcu(&timeout->head, &pernet->nfct_timeout_list);
return 0; return 0;
...@@ -506,13 +507,8 @@ static struct nf_ct_timeout *ctnl_timeout_find_get(struct net *net, ...@@ -506,13 +507,8 @@ static struct nf_ct_timeout *ctnl_timeout_find_get(struct net *net,
if (strncmp(timeout->name, name, CTNL_TIMEOUT_NAME_MAX) != 0) if (strncmp(timeout->name, name, CTNL_TIMEOUT_NAME_MAX) != 0)
continue; continue;
if (!try_module_get(THIS_MODULE)) if (!refcount_inc_not_zero(&timeout->refcnt))
goto err; goto err;
if (!refcount_inc_not_zero(&timeout->refcnt)) {
module_put(THIS_MODULE);
goto err;
}
matching = timeout; matching = timeout;
break; break;
} }
...@@ -525,10 +521,10 @@ static void ctnl_timeout_put(struct nf_ct_timeout *t) ...@@ -525,10 +521,10 @@ static void ctnl_timeout_put(struct nf_ct_timeout *t)
struct ctnl_timeout *timeout = struct ctnl_timeout *timeout =
container_of(t, struct ctnl_timeout, timeout); container_of(t, struct ctnl_timeout, timeout);
if (refcount_dec_and_test(&timeout->refcnt)) if (refcount_dec_and_test(&timeout->refcnt)) {
kfree_rcu(timeout, rcu_head); kfree_rcu(timeout, rcu_head);
module_put(THIS_MODULE); module_put(THIS_MODULE);
}
} }
static const struct nfnl_callback cttimeout_cb[IPCTNL_MSG_TIMEOUT_MAX] = { static const struct nfnl_callback cttimeout_cb[IPCTNL_MSG_TIMEOUT_MAX] = {
......
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