All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Liping Zhang <zlpnobody@gmail.com>
Cc: Liping Zhang <zlpnobody@163.com>,
	Netfilter Developer Mailing List
	<netfilter-devel@vger.kernel.org>
Subject: Re: [PATCH nf V2] netfilter: nf_ct_helper: permit cthelpers with different names via nfnetlink
Date: Fri, 14 Apr 2017 00:29:14 +0200	[thread overview]
Message-ID: <20170413222914.GA5089@salvia> (raw)
In-Reply-To: <CAML_gOdMiDPy==pvW5D5MrJZ1UfnpAzK172R4QbehnSkmHZP0w@mail.gmail.com>

On Thu, Mar 30, 2017 at 10:12:00AM +0800, Liping Zhang wrote:
> Hi Pablo,
> 
> 2017-03-29 21:00 GMT+08:00 Liping Zhang <zlpnobody@163.com>:
> > From: Liping Zhang <zlpnobody@gmail.com>
> >
> > cthelpers added via nfnetlink may have the same tuple, i.e. except for
> > the l3proto and l4proto, other fields are all zero. So even with the
> > different names, we will also fail to add them:
> >   # nfct helper add ssdp inet udp
> >   # nfct helper add tftp inet udp
> >   nfct v1.4.3: netlink error: File exists
> >
> > So in order to avoid unpredictable behaviour, we should:
> > 1. cthelpers can be selected by nft ct helper obj or xt_CT target, so
> > report error if duplicated { name, l3proto, l4proto } tuple exist.
> > 2. cthelpers can be selected by nf_ct_tuple_src_mask_cmp when
> > nf_ct_auto_assign_helper is enabled, so also report error if duplicated
> > { l3proto, l4proto, src-port } tuple exist.
> >
> > Also note, if the cthelper is added from userspace, then the src-port will
> > always be zero, it's invalid for nf_ct_auto_assign_helper, so there's no
> > need to check the second point listed above.
> >
> > Fixes: 893e093c786c ("netfilter: nf_ct_helper: bail out on duplicated helpers")
> > Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
> > ---
> >  V2: drop to use __nf_conntrack_helper_find which may cause annoying
> >      rcu warning when debug is enabled, spotted by Pablo.
> 
> I think this patch should be ignored.
> 
> >  net/netfilter/nf_conntrack_helper.c | 26 +++++++++++++++++++++-----
> >  1 file changed, 21 insertions(+), 5 deletions(-)
> [...]
> > +       for (i = 0; i < nf_ct_helper_hsize; i++) {
> > +               hlist_for_each_entry(cur, &nf_ct_helper_hash[i], hnode) {
> > +                       if (!strcmp(cur->name, me->name) &&
> > +                           (cur->tuple.src.l3num == NFPROTO_UNSPEC ||
> > +                            cur->tuple.src.l3num == me->tuple.src.l3num) &&
> > +                           cur->tuple.dst.protonum == me->tuple.dst.protonum) {
> > +                               ret = -EEXIST;
> > +                               goto out;
> > +                       }
> > +               }
> > +       }
> 
> After I have a closer look, inside hlist_for_each_entry_rcu, we use the
> rcu_dereference_raw() to get the pointer, and this will not generate warning:
> 
> #define hlist_for_each_entry_rcu(pos, head, member) \
>     for (pos = hlist_entry_safe (rcu_dereference_raw(hlist_first_rcu(head)),\
>                          typeof(*(pos)), member);
>    ....
> 
> Then "This is likely going to spot false positives with the RCU
> debugging instrumentation"
> will not happen.

Right, instrumentation will not trigger any problem.

But even if instrumention is not a problem, I just would like to avoid
people sending me "obvious" fixes afterwards, by removing _rcu since
they see this code runs under mutex or how knows what.

  reply	other threads:[~2017-04-13 22:29 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-29 13:00 [PATCH nf V2] netfilter: nf_ct_helper: permit cthelpers with different names via nfnetlink Liping Zhang
2017-03-30  2:12 ` Liping Zhang
2017-04-13 22:29   ` Pablo Neira Ayuso [this message]
2017-04-13 23:50     ` Liping Zhang
2017-04-13 23:57       ` Pablo Neira Ayuso
2017-04-15  9:28         ` Pablo Neira Ayuso
2017-04-15  9:34           ` Liping Zhang

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=20170413222914.GA5089@salvia \
    --to=pablo@netfilter.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=zlpnobody@163.com \
    --cc=zlpnobody@gmail.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.