From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Florian Westphal <fw@strlen.de>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: [PATCH nf-next] netfilter: ingress: translate 0 nf_hook_slow retval to -EINPROGRESS
Date: Tue, 6 Dec 2016 11:35:45 +0100 [thread overview]
Message-ID: <20161206103545.GA4129@salvia> (raw)
In-Reply-To: <1480329606-6592-2-git-send-email-fw@strlen.de>
On Mon, Nov 28, 2016 at 11:40:05AM +0100, Florian Westphal wrote:
> The caller assumes that < 0 means that skb was stolen (or free'd).
>
> All other return values continue skb processing.
>
> nf_hook_slow returns 3 different return value types:
>
> A) a (negative) errno value: the skb was dropped (NF_DROP, e.g.
> by iptables '-j DROP' rule).
>
> B) 0. The skb was stolen by the hook or queued to userspace.
>
> C) 1. all hooks returned NF_ACCEPT so the caller should invoke
> the okfn so packet processing can continue.
>
> nft ingress facility currently doesn't have the 'okfn' that
> the NF_HOOK() macros use; there is no nfqueue support either.
>
> So 1 means that nf_hook_ingress() caller should go on processing the skb.
>
> In order to allow use of NF_STOLEN from ingress we need to translate
> this to an errno number, else we'd crash because we continue with
> already-free'd (or about to be free-d) skb.
>
> Random dice roll has chosen EINPROGRESS. The errno value isn't checked,
> its just important that its less than 0.
Not really comments to block anything, so take them lightly.
Probably we can just set this to -1, I know this maps to some errno
value, but at least from code reading it will be make think that we
meant to return EINPROGRESS. If you agree, I can just mangle the
patch.
One more question below.
> Signed-off-by: Florian Westphal <fw@strlen.de>
> ---
> include/linux/netfilter_ingress.h | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/netfilter_ingress.h b/include/linux/netfilter_ingress.h
> index 2dc3b49b804a..d5027e470a24 100644
> --- a/include/linux/netfilter_ingress.h
> +++ b/include/linux/netfilter_ingress.h
> @@ -19,6 +19,7 @@ static inline int nf_hook_ingress(struct sk_buff *skb)
> {
> struct nf_hook_entry *e = rcu_dereference(skb->dev->nf_hooks_ingress);
> struct nf_hook_state state;
> + int ret;
>
> /* Must recheck the ingress hook head, in the event it became NULL
> * after the check in nf_hook_ingress_active evaluated to true.
> @@ -29,7 +30,11 @@ static inline int nf_hook_ingress(struct sk_buff *skb)
> nf_hook_state_init(&state, NF_NETDEV_INGRESS,
> NFPROTO_NETDEV, skb->dev, NULL, NULL,
> dev_net(skb->dev), NULL);
> - return nf_hook_slow(skb, &state, e);
> + ret = nf_hook_slow(skb, &state, e);
> + if (unlikely(ret == 0))
> + return -EINPROGRESS;
Do you prefer to keep this branch as unlikely? I understand most
people are not using fwd much so far, but we're targeting to enrich
ingress so I would expect users will be using this more and more.
Anyway, we can revisit this later on.
next prev parent reply other threads:[~2016-12-06 10:35 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-28 10:40 [PATCH nf-next] netfilter: remove need for skb_clone in nf_fwd_netdev_egress Florian Westphal
2016-11-28 10:40 ` [PATCH nf-next] netfilter: ingress: translate 0 nf_hook_slow retval to -EINPROGRESS Florian Westphal
2016-12-06 10:35 ` Pablo Neira Ayuso [this message]
2016-11-28 10:40 ` [PATCH nf-next] netfilter: add and use nf_fwd_netdev_egress 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=20161206103545.GA4129@salvia \
--to=pablo@netfilter.org \
--cc=fw@strlen.de \
--cc=netfilter-devel@vger.kernel.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 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.