From: Patrick McHardy <kaber@trash.net>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>,
David Miller <davem@davemloft.net>,
netdev@vger.kernel.org, netfilter-devel@vger.kernel.org
Subject: Re: [PATCH net] netfilter: nf_qeueue: Drop queue entries on nf_unregister_hook
Date: Sat, 20 Jun 2015 18:35:21 +0200 [thread overview]
Message-ID: <20150620163521.GC6915@acer.localdomain> (raw)
In-Reply-To: <87616i8nyv.fsf@x220.int.ebiederm.org>
On 20.06, Eric W. Biederman wrote:
> Patrick McHardy <kaber@trash.net> writes:
>
> > On 20.06, Pablo Neira Ayuso wrote:
> >> On Fri, Jun 19, 2015 at 02:03:39PM -0500, Eric W. Biederman wrote:
> >> >
> >> > Add code to nf_unregister_hook to flush the nf_queue when a hook is
> >> > unregistered. This guarantees that the pointer that the nf_queue code
> >> > retains into the nf_hook list will remain valid while a packet is
> >> > queued.
> >>
> >> I think the real problem is that struct nf_queue_entry holds a pointer
> >> to struct nf_hook_ops, which will be gone after removal. So you
> >> uncovered a long standing problem that will amplify by when pernet
> >> hooks are in place.
> >>
> >> Regarding the pointer to nf_hook_list, now that new netdevice variant
> >> doesn't support nf_queue yet, so that nf_hook_list will be always
> >> valid since it will point to the global nf_hooks in the core.
> >
> > I think Eric's patch is the right thing to do. I'm not sure I get
> > your netdev comment, but we certainly do want to drop packets once
> > a hook is gone.
> >
> >> > +{
> >> > + const struct nf_queue_handler *qh;
> >> > + struct net *net;
> >> > +
> >> > + rtnl_lock();
> >>
> >> Why rtnl_lock() here?
> >
> > for_each_net(). Would actually be nice to have a variant that doesn't
> > need the rtnl since it makes locking order analysis a lot harder.
>
> Someone added a for_each_net_rcu. But right now I am not at all certain
> I trust an rcu variant not to miss something, in a weird corner case.
> When missing something translates to an unprivileged user triggerable
> kernel oops I am not ready to play games.
>
> As for the lock analysis. Except for nf_tables nf_unregister_hook is
> called by module removal routines where rtnl_lock() is safe.
>
> With nftables we seem to do everything under some version of the
> nfnl_lock. Does the nfnl_lock have any problems with taking the
> rtnl_lock to nest underneath it?
No, its fine, we have almost none interactions except for network
namespaces and device lookups.
Main reason why I'd prefer a non-RTNL version is because your
callbacks introduce bigger chunks of code under the RTNL, so
it might complicate things in the future. But your reasoning is
sound and for now this is perfectly fine.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
next prev parent reply other threads:[~2015-06-20 16:35 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <878ubffron.fsf@x220.int.ebiederm.org>
2015-06-19 19:03 ` [PATCH net] netfilter: nf_qeueue: Drop queue entries on nf_unregister_hook Eric W. Biederman
2015-06-20 10:57 ` Pablo Neira Ayuso
2015-06-20 11:32 ` Patrick McHardy
2015-06-20 14:16 ` Eric W. Biederman
2015-06-20 16:35 ` Patrick McHardy [this message]
2015-06-20 19:00 ` Pablo Neira Ayuso
2015-06-20 14:03 ` Eric W. Biederman
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=20150620163521.GC6915@acer.localdomain \
--to=kaber@trash.net \
--cc=davem@davemloft.net \
--cc=ebiederm@xmission.com \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).