From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Florian Westphal <fw@strlen.de>
Cc: netfilter-devel@vger.kernel.org, Zhiling Zou <zhilinz@nebusec.ai>
Subject: Re: [PATCH nf-next] netfilter: x_tables: reject missing '-p' flag and check for INV flag
Date: Fri, 21 Aug 2026 16:02:22 +0200 [thread overview]
Message-ID: <aohabszy_Ac23p7x@chamomile> (raw)
In-Reply-To: <20260821134136.18191-1-fw@strlen.de>
Hi,
On Fri, Aug 21, 2026 at 03:41:36PM +0200, Florian Westphal wrote:
> ip6tables traverser doesn't walk ipv6 extension headers unless the PROTO
> flag is set, so direct sockopt-users can bypass the check (ip6tables
> always sets it if '-p' flag is given. This is a cleanup patch, it
> doesn't fix any real bug.
I really think it is better to squash the TPROXY fix into this one
too, it is the same logical fix.
Sashiko also hinting to fix ip6_tables core check for this protocol
flag:
https://sashiko.dev/#/patchset/20260821134136.18191-1-fw%40strlen.de
Thanks!
> Reported-by: Zhiling Zou <zhilinz@nebusec.ai>
> Fixes: 74f77a6b2b1c ("netfilter: introduce l2tp match extension")
> Fixes: af0d29cd2a73 ("netfilter: xtables: add an IPv6 capable version of the ECN match")
> Fixes: a89ecb6a2ef7 ("[NETFILTER]: x_tables: unify IPv4/IPv6 multiport match")
> Signed-off-by: Florian Westphal <fw@strlen.de>
> ---
> Can also be applied to nf, but I don't think this one is urgent.
>
> net/netfilter/xt_ecn.c | 3 ++-
> net/netfilter/xt_l2tp.c | 11 +++++++----
> net/netfilter/xt_multiport.c | 3 +++
> 3 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/net/netfilter/xt_ecn.c b/net/netfilter/xt_ecn.c
> index a8503f5d26bf..008e7fcbeb22 100644
> --- a/net/netfilter/xt_ecn.c
> +++ b/net/netfilter/xt_ecn.c
> @@ -139,7 +139,8 @@ static int ecn_mt_check6(const struct xt_mtchk_param *par)
> return -EINVAL;
>
> if (info->operation & (XT_ECN_OP_MATCH_ECE | XT_ECN_OP_MATCH_CWR) &&
> - (ip->proto != IPPROTO_TCP || ip->invflags & IP6T_INV_PROTO)) {
> + (!(ip->flags & IP6T_F_PROTO) ||
> + ip->proto != IPPROTO_TCP || ip->invflags & IP6T_INV_PROTO)) {
> pr_info_ratelimited("cannot match TCP bits for non-tcp packets\n");
> return -EINVAL;
> }
> diff --git a/net/netfilter/xt_l2tp.c b/net/netfilter/xt_l2tp.c
> index a61eb81e9f49..ad2d559caa99 100644
> --- a/net/netfilter/xt_l2tp.c
> +++ b/net/netfilter/xt_l2tp.c
> @@ -267,8 +267,9 @@ static int l2tp_mt_check4(const struct xt_mtchk_param *par)
> if (ret != 0)
> return ret;
>
> - if ((ip->proto != IPPROTO_UDP) &&
> - (ip->proto != IPPROTO_L2TP)) {
> + if (ip->invflags & IPT_INV_PROTO ||
> + (ip->proto != IPPROTO_UDP &&
> + ip->proto != IPPROTO_L2TP)) {
> pr_info_ratelimited("missing protocol rule (udp|l2tpip)\n");
> return -EINVAL;
> }
> @@ -294,8 +295,10 @@ static int l2tp_mt_check6(const struct xt_mtchk_param *par)
> if (ret != 0)
> return ret;
>
> - if ((ip->proto != IPPROTO_UDP) &&
> - (ip->proto != IPPROTO_L2TP)) {
> + if (((ip->flags & IP6T_F_PROTO) == 0 ||
> + ip->invflags & IP6T_INV_PROTO ||
> + (ip->proto != IPPROTO_UDP &&
> + ip->proto != IPPROTO_L2TP))) {
> pr_info_ratelimited("missing protocol rule (udp|l2tpip)\n");
> return -EINVAL;
> }
> diff --git a/net/netfilter/xt_multiport.c b/net/netfilter/xt_multiport.c
> index a1691ff405d3..48aa25749063 100644
> --- a/net/netfilter/xt_multiport.c
> +++ b/net/netfilter/xt_multiport.c
> @@ -160,6 +160,9 @@ static int multiport_mt6_check(const struct xt_mtchk_param *par)
> const struct ip6t_ip6 *ip = par->entryinfo;
> const struct xt_multiport_v1 *multiinfo = par->matchinfo;
>
> + if (!(ip->flags & IP6T_F_PROTO))
> + return -EINVAL;
> +
> if (!check(ip->proto, ip->invflags, multiinfo->flags, multiinfo->count))
> return -EINVAL;
>
> --
> 2.54.0
>
>
next prev parent reply other threads:[~2026-08-21 14:02 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-21 13:41 [PATCH nf-next] netfilter: x_tables: reject missing '-p' flag and check for INV flag Florian Westphal
2026-08-21 14:02 ` Pablo Neira Ayuso [this message]
2026-08-22 8:14 ` Florian Westphal
2026-08-24 21:50 ` Pablo Neira Ayuso
2026-08-24 21:55 ` Florian Westphal
2026-08-24 22:18 ` Florian Westphal
2026-08-24 22:24 ` Pablo Neira Ayuso
2026-08-24 22:23 ` Pablo Neira Ayuso
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=aohabszy_Ac23p7x@chamomile \
--to=pablo@netfilter.org \
--cc=fw@strlen.de \
--cc=netfilter-devel@vger.kernel.org \
--cc=zhilinz@nebusec.ai \
/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