From: Pablo Neira Ayuso <pablo@netfilter.org>
To: netdev-bot+sashiko@kernel.org
Cc: netfilter-devel@vger.kernel.org, davem@davemloft.net,
netdev@vger.kernel.org, kuba@kernel.org, pabeni@redhat.com,
edumazet@kernel.org, horms@kernel.org, fw@strlen.de, ja@ssi.bg
Subject: Re: [PATCH net-next 09/15] netfilter: nft_exthdr: avoid 60 bytes stack buffer in TCP option mangling
Date: Mon, 19 Oct 2026 11:11:01 +0200 [thread overview]
Message-ID: <atXepTQ9VUufeOAu@chamomile> (raw)
In-Reply-To: <179237288600.3135.15119152740392179853@kernel.org>
On Mon, Oct 19, 2026 at 01:21:26AM +0000, netdev-bot+sashiko@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential
> issue(s) to consider.
>
> Critical: 0 · High: 0 · Medium: 1 · Low: 0
>
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
>
> - [Medium] The commit message says "This patch also updates the logic to
> drop malformed packets, before this patch NFT_BREAK was used as a…
>
> --
>
> netfilter: nft_exthdr: avoid 60 bytes stack buffer in TCP option mangling
>
> This commit changes nft_exthdr_tcp_set_eval() and
> nft_exthdr_tcp_strip_eval() so they no longer call
> nft_tcp_header_pointer(). Each function now reads only the 20 byte fixed
> TCP header with skb_header_pointer(), validates doff, and leaves it to
> skb_ensure_writable() to pull the options. This removes a 60 byte stack
> buffer and a redundant second header copy from both functions.
>
> > diff --git a/net/netfilter/nft_exthdr.c b/net/netfilter/nft_exthdr.c
> > index 3492426dccf7f..861bab93f4352 100644
> > --- a/net/netfilter/nft_exthdr.c
> > +++ b/net/netfilter/nft_exthdr.c
> > @@ -233,16 +233,23 @@ static void nft_exthdr_tcp_set_eval(const struct nft_expr *expr,
>
> [ ... ]
>
> > - tcph = nft_tcp_header_pointer(pkt, sizeof(buff), buff, &tcphdr_len);
> > + if (pkt->tprot != IPPROTO_TCP || pkt->fragoff)
> > + goto err;
> > +
> > + tcph = skb_header_pointer(pkt->skb, nft_thoff(pkt), sizeof(_tcph), &_tcph);
> > if (!tcph)
> > goto err;
> >
> > + tcphdr_len = __tcp_hdrlen(tcph);
> > + if (tcphdr_len < sizeof(*tcph) ||
> > + tcphdr_len > sizeof(*tcph) + MAX_TCP_OPTION_SPACE)
> > + goto err;
> > +
> > if (skb_ensure_writable(pkt->skb, nft_thoff(pkt) + tcphdr_len))
> > goto err;
> >
> > @@ -313,16 +320,23 @@ static void nft_exthdr_tcp_strip_eval(const struct nft_expr *expr,
>
> [ ... ]
>
> > - tcph = nft_tcp_header_pointer(pkt, sizeof(buff), buff, &tcphdr_len);
> > + if (pkt->tprot != IPPROTO_TCP || pkt->fragoff)
> > + goto err;
> > +
> > + tcph = skb_header_pointer(pkt->skb, nft_thoff(pkt), sizeof(_tcph), &_tcph);
> > if (!tcph)
> > goto err;
> >
> > + tcphdr_len = __tcp_hdrlen(tcph);
> > + if (tcphdr_len < sizeof(*tcph) ||
> > + tcphdr_len > sizeof(*tcph) + MAX_TCP_OPTION_SPACE)
> > + goto err;
> > +
> > if (skb_ensure_writable(pkt->skb, nft_thoff(pkt) + tcphdr_len))
> > goto drop;
>
> [Severity: Medium]
Nothing wrong in this patch.
> The commit message says:
>
> This patch also updates the logic to drop malformed packets, before this
> patch NFT_BREAK was used as a verdict instead.
I added this comment to make this AI robot and it keeps complaining...
> Does that match what the diff does? The diff does not touch any verdict
> code. The change in behaviour only comes from removing the second,
> full-length skb_header_pointer() call that nft_tcp_header_pointer() made:
>
> return skb_header_pointer(pkt->skb, nft_thoff(pkt), *tcphdr_len, buffer);
>
> Before this patch, a truncated TCP packet (thoff + doff * 4 > skb->len)
> made that call return NULL. Both functions then took goto err and
> returned NFT_BREAK.
Yes, this is what the comment aims to say.
next prev parent reply other threads:[~2026-10-19 9:11 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-18 0:56 [PATCH net-next 00/15] Netfilter updates for net-next Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 01/15] netfilter: disable br_netfilter in user namespaces Pablo Neira Ayuso
2026-10-18 1:03 ` netdev-bot+sinfo
2026-10-18 1:20 ` Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 9:15 ` Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 02/15] selftests: netfilter: nft_queue.sh: only queue icmp echo request/reply Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 4:23 ` Florian Westphal
2026-10-19 9:12 ` Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 03/15] ipvs: fix buffer overflow when sending sync messages Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 04/15] netfilter: nf_queue: limit the hook drop flush to the unregistered hook point Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 4:49 ` Florian Westphal
2026-10-19 9:18 ` Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 05/15] selftests: netfilter: nft_queue: check the scope of the hook drop flush Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 4:54 ` Florian Westphal
2026-10-18 0:56 ` [PATCH net-next 06/15] netfilter: conntrack: fix unlikely UaF in gc worker Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 07/15] netfilter: nf_tables: switch chain_types array to rcu Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 5:00 ` Florian Westphal
2026-10-18 0:56 ` [PATCH net-next 08/15] netfilter: nft_exthdr: remove redundant op parsing in tcp_set_init Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 09/15] netfilter: nft_exthdr: avoid 60 bytes stack buffer in TCP option mangling Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 9:11 ` Pablo Neira Ayuso [this message]
2026-10-18 0:56 ` [PATCH net-next 10/15] selftests: netfilter: fix return value in zone subtest Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 11/15] netfilter: nft_compat: restrict raw table targets/matches Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 5:17 ` Florian Westphal
2026-10-18 0:56 ` [PATCH net-next 12/15] netfilter: flowtable: set inner protocol when popping tunnel header Pablo Neira Ayuso
2026-10-19 1:21 ` netdev-bot+sashiko
2026-10-19 9:11 ` Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 13/15] netfilter: flowtable: populate tunnel tuple regardless of inner protocol Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 14/15] netfilter: flowtable: add encap_proto to flow_offload_tunnel Pablo Neira Ayuso
2026-10-18 0:56 ` [PATCH net-next 15/15] netfilter: flowtable: unify tunnel push for IPv4 and IPv6 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=atXepTQ9VUufeOAu@chamomile \
--to=pablo@netfilter.org \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=fw@strlen.de \
--cc=horms@kernel.org \
--cc=ja@ssi.bg \
--cc=kuba@kernel.org \
--cc=netdev-bot+sashiko@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=pabeni@redhat.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.