From: Ido Schimmel <idosch@nvidia.com>
To: Eric Dumazet <edumazet@google.com>
Cc: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
David Ahern <dsahern@kernel.org>, Simon Horman <horms@kernel.org>,
netdev@vger.kernel.org, eric.dumazet@gmail.com,
TencentOS Corvus AI <corvus@tencent.com>,
Jun Yang <junvyyang@tencent.com>,
Fourie Zhang <fouriezhang@tencent.com>
Subject: Re: [PATCH net] ipv6: sr: restore network header before routing and forwarding
Date: Sun, 30 Aug 2026 14:21:18 +0300 [thread overview]
Message-ID: <20260830112118.GA2870495@shredder> (raw)
In-Reply-To: <20260828141727.2372570-1-edumazet@google.com>
On Fri, Aug 28, 2026 at 02:17:27PM +0000, Eric Dumazet wrote:
> ipv6_srh_rcv() runs with skb->data at the Segment Routing Header (SRH)
> while skb_network_header() points at the IPv6 header.
>
> When segments_left > 0, ipv6_srh_rcv() previously restored the skb->data
> position by pushing sizeof(struct ipv6hdr), assuming the SRH immediately
> followed the fixed IPv6 header. If another extension header (such as a
> Hop-by-Hop options header) precedes the SRH, skb_network_offset()
> remained negative.
>
> This led to two problems:
> 1. During ip6_route_input(), fib6_rules_early_flow_dissect() invokes
> __skb_flow_dissect() which passes the negative skb_network_offset()
> to flow dissection, breaking BPF and C flow dissector logic.
> 2. If forwarded via ip6_forward() or redirected via act_mirred, downstream
> handlers (like sch_fragment() or neighbour output) pass the negative
> offset as an unsigned length, triggering OOB memcpy or buffer overflows.
>
> Fix this by pushing -skb_network_offset(skb) before routing, ensuring
> skb_network_offset(skb) is 0 for route lookup / flow dissection as well as
> downstream forwarding. On the loopback path, pull skb_transport_offset(skb)
> to restore skb->data to the SRH before looping back.
>
> Fixes: 1ababeba4a21 ("ipv6: implement dataplane support for rthdr type 4 (Segment Routing Header)")
> Reported-by: TencentOS Corvus AI <corvus@tencent.com>
> Reported-by: Jun Yang <junvyyang@tencent.com>
> Reported-by: Fourie Zhang <fouriezhang@tencent.com>
> Closes: https://lore.kernel.org/netdev/20260817104128.22681-1-juny24602@gmail.com/
> Closes: https://lore.kernel.org/netdev/20260827092345.2301937-1-fouriezhang@tencent.com/
> Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
prev parent reply other threads:[~2026-08-30 11:21 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-28 14:17 [PATCH net] ipv6: sr: restore network header before routing and forwarding Eric Dumazet
2026-08-30 11:21 ` Ido Schimmel [this message]
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=20260830112118.GA2870495@shredder \
--to=idosch@nvidia.com \
--cc=corvus@tencent.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=fouriezhang@tencent.com \
--cc=horms@kernel.org \
--cc=junvyyang@tencent.com \
--cc=kuba@kernel.org \
--cc=netdev@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.