From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Gao feng <gaofeng@cn.fujitsu.com>
Cc: davem@davemloft.net, eric.dumazet@gmail.com,
steffen.klassert@secunet.com, netfilter-devel@vger.kernel.org,
linux-rdma@vger.kernel.org, netdev@vger.kernel.org,
linux-crypto@vger.kernel.org, stephen.hemminger@vyatta.com,
jengelh@inai.de
Subject: Re: [patch v2 04/11] nf_conntrack_netlink: pass nf_conntrack_netlink module to netlink_dump_start
Date: Wed, 26 Sep 2012 11:58:37 +0200 [thread overview]
Message-ID: <20120926095837.GA23815@1984> (raw)
In-Reply-To: <5062CE07.1080704@cn.fujitsu.com>
On Wed, Sep 26, 2012 at 05:42:31PM +0800, Gao feng wrote:
> Hi Pablo:
>
> 于 2012年09月26日 17:26, Pablo Neira Ayuso 写道:
> > On Wed, Sep 26, 2012 at 04:41:21PM +0800, Gao feng wrote:
> >> use proper netlink_dump_control.done and .module to avoid panic.
> >>
> >> Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
> >> ---
> >> net/netfilter/nf_conntrack_netlink.c | 8 ++++++++
> >> 1 files changed, 8 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
> >> index 9807f32..509a257 100644
> >> --- a/net/netfilter/nf_conntrack_netlink.c
> >> +++ b/net/netfilter/nf_conntrack_netlink.c
> >> @@ -706,6 +706,7 @@ static int ctnetlink_done(struct netlink_callback *cb)
> >> nf_ct_put((struct nf_conn *)cb->args[1]);
> >> if (cb->data)
> >> kfree(cb->data);
> >> + netlink_dump_done(cb);
> >
> > I think you can call netlink_dump_done from af_netlink.c:
> >
> > static int netlink_dump(struct sock *sk)
> > ...
> > if (cb->done) {
> > cb->done(cb);
> > netlink_dump_done(...);
> > }
> >
> > Thus, you don't need to change netlink_dump_control in every netlink
> > subsystem.
>
> because cb->done is called by netlink_sock_destruct too,it's very usefully
> when userspace program only send dump request to kernel without reading
> data from kernel.
Then add that to netlink_sock_destruct as well. If possible, I prefer
if this remains in the netlink core to avoid leaking module refcount
if you forget to call netlink_dump_done.
> >
> >> return 0;
> >> }
> >>
> >> @@ -1022,6 +1023,7 @@ ctnetlink_get_conntrack(struct sock *ctnl, struct sk_buff *skb,
> >> struct netlink_dump_control c = {
> >> .dump = ctnetlink_dump_table,
> >> .done = ctnetlink_done,
> >> + .module = THIS_MODULE,
> >
> > You can do something similar to:
> >
> > 9f00d97 netlink: hide struct module parameter in netlink_kernel_create
> >
> > by definiting netlink_dump_start as static inline and using
> > THIS_MODULE from there.
> >
> > If I'm not missing anything, with those two changes, you will not need
> > to modify any caller and it will result one single patch.
> >
>
> You can see the patch [11/11], THIS_MODULE in infiniband/core/cma.c
> means module rdma_cm,but we call netlink_dump_start in infiniband/core/netlink.c
You can still use __netlink_dump_start for that case, which allows you
to specify a custom struct module * parameter. But for most cases,
netlink_dump_start (which hides THIS_MODULE) should be fine.
> we should make sure the cb.moudle point to the module which cb.dump belongs to.
> we can call netlink_dump_start to set cb->dump everywhere, so I think we still
> need to pass struct module to the netlink_callback.
>
> thanks for your comments!
> --
> To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-09-26 9:58 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-26 8:41 [patch v2 01/11] netlink: add reference of module in netlink_dump_start Gao feng
2012-09-26 8:41 ` [patch v2 02/11] inet_diag: pass inet_diag module to netlink_dump_start Gao feng
2012-09-26 8:41 ` [patch v2 03/11] unix_diag: pass unix_diag " Gao feng
2012-09-26 8:41 ` [patch v2 04/11] nf_conntrack_netlink: pass nf_conntrack_netlink " Gao feng
2012-09-26 9:25 ` Gao feng
2012-09-26 9:26 ` Pablo Neira Ayuso
2012-09-26 9:42 ` Gao feng
2012-09-26 9:58 ` Pablo Neira Ayuso [this message]
2012-09-26 12:35 ` Gao feng
[not found] ` <5062F6A9.7020309-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2012-09-26 15:04 ` Pablo Neira Ayuso
2012-09-27 0:14 ` Gao feng
2012-09-26 8:41 ` [patch v2 05/11] nfnetlink_acct: pass nfnetlink_acct " Gao feng
2012-09-26 8:41 ` [patch v2 08/11] crypto: pass crypto_user " Gao feng
2012-09-26 8:41 ` [patch v2 09/11] xfrm: pass xfrm_user " Gao feng
[not found] ` <1348648888-24943-1-git-send-email-gaofeng-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2012-09-26 8:41 ` [patch v2 06/11] nfnetlink_cthelper: pass nfnetlink_cthelper " Gao feng
2012-09-26 8:41 ` [patch v2 07/11] nfnetlink_cttimeout: pass nfnetlink_cttimeout " Gao feng
2012-09-26 8:41 ` [patch v2 10/11] ipset: pass ipset " Gao feng
2012-09-26 8:41 ` [patch v2 11/11] infiniband: pass rdma_cm " Gao feng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120926095837.GA23815@1984 \
--to=pablo@netfilter.org \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=gaofeng@cn.fujitsu.com \
--cc=jengelh@inai.de \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=steffen.klassert@secunet.com \
--cc=stephen.hemminger@vyatta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.