From: Florian Westphal <fw@strlen.de>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel@vger.kernel.org, mkubecek@suse.cz,
jacobraz@chromium.org, fw@strlen.de
Subject: Re: [PATCH nf 1/2] netfilter: conntrack: make conntrack userspace helpers work again
Date: Sun, 24 May 2020 22:36:38 +0200 [thread overview]
Message-ID: <20200524203638.GB2915@breakpoint.cc> (raw)
In-Reply-To: <20200524195410.28502-2-pablo@netfilter.org>
Pablo Neira Ayuso <pablo@netfilter.org> wrote:
> Florian Westphal says:
>
> "Problem is that after the helper hook was merged back into the confirm
> one, the queueing itself occurs from the confirm hook, i.e. we queue
> from the last netfilter callback in the hook-list.
>
> Therefore, on return, the packet bypasses the confirm action and the
> connection is never committed to the main conntrack table.
>
> Therefore, on return, the packet bypasses the confirm action and the
> connection is never committed to the main conntrack table.
>
> To fix this there are several ways:
> 1. revert the 'Fixes' commit and have a extra helper hook again.
> Works, but has the drawback of adding another indirect call for
> everyone.
>
> 2. Special case this: split the hooks only when userspace helper
> gets added, so queueing occurs at a lower priority again,
> and normal nqueue reinject would eventually call the last hook.
>
> 3. Extend the existing nf_queue ct update hook to allow a forced
> confirmation (plus run the seqadj code).
>
> This goes for 3)."
>
> Fixes: 827318feb69cb ("netfilter: conntrack: remove helper hook again")
> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
> ---
> + * processing after the helper invocation in nf_confirm().
> + */
> +static int nf_confirm_cthelper(struct sk_buff *skb, struct nf_conn *ct,
> + enum ip_conntrack_info ctinfo)
> +{
> + const struct nf_conntrack_helper *helper;
> + const struct nf_conn_help *help;
> + unsigned int protoff;
> +
> + help = nfct_help(ct);
> + if (!help)
> + return 0;
> +
> + helper = rcu_dereference(help->helper);
> + if (!(helper->flags & NF_CT_HELPER_F_USERSPACE))
> + return 0;
Relying on this check means that in case of
... -j CT (assign userspace helper)
... -j NFQUEUE
> + /* We've seen it coming out the other side: confirm it */
> + return nf_conntrack_confirm(skb) == NF_DROP ? - 1 : 0;
> +}
> +static int nf_conntrack_update(struct net *net, struct sk_buff *skb)
> +{
[..]
> + err = nf_confirm_cthelper(skb, ct, ctinfo);
> + if (err < 0)
> + return err;
> +
> + if (nf_ct_is_confirmed(ct))
> + return 0;
This means that in case of userspace helper, we return here
any bypass the __nf_conntrack_update logic.
I don't think thats a problem either given the userspace
helper presence, so
Acked-by: Florian Westphal <fw@strlen.de>
next prev parent reply other threads:[~2020-05-24 20:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-24 19:54 [PATCH nf 0/2] restore userspace helper support Pablo Neira Ayuso
2020-05-24 19:54 ` [PATCH nf 1/2] netfilter: conntrack: make conntrack userspace helpers work again Pablo Neira Ayuso
2020-05-24 20:36 ` Florian Westphal [this message]
2020-05-24 19:54 ` [PATCH nf 2/2] netfilter: nfnetlink_cthelper: unbreak userspace helper support Pablo Neira Ayuso
2020-05-24 20:32 ` Florian Westphal
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=20200524203638.GB2915@breakpoint.cc \
--to=fw@strlen.de \
--cc=jacobraz@chromium.org \
--cc=mkubecek@suse.cz \
--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).