From: Ido Schimmel <idosch@nvidia.com>
To: Norbert Szetei <norbert@doyensec.com>
Cc: netdev@vger.kernel.org, David Ahern <dsahern@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Ilya Maximets <i.maximets@ovn.org>,
Aaron Conole <aconole@redhat.com>,
Eelco Chaudron <echaudro@redhat.com>,
dev@openvswitch.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net v2] ipv6: do not let ipv6_find_hdr() return an offset past the packet end
Date: Thu, 17 Sep 2026 18:57:41 +0300 [thread overview]
Message-ID: <20260917155741.GA1377171@shredder> (raw)
In-Reply-To: <8F80BA1A-DDFD-432D-9075-242A3435FEB5@doyensec.com>
On Wed, Sep 16, 2026 at 09:57:53PM +0200, Norbert Szetei wrote:
> ipv6_find_hdr() walks the extension header chain, skipping each header by
> the length that header itself declares. ipv6_optlen() returns up to 2048,
> and the skip is never checked against skb->len, so the offset stored in
> *offset can point past the end of the packet.
>
> openvswitch installs that offset as the transport header, and
> update_ipv6_checksum() then reads and writes the transport checksum field
> out of bounds:
>
> BUG: KASAN: slab-use-after-free in inet_proto_csum_replace16+0x445/0x470
> Read of size 2 at addr ffff88810b754b06 by task ovs_ipv6_oob/629
> CPU: 4 UID: 1000 PID: 629 Comm: ovs_ipv6_oob Tainted: G N 7.3.0-rc3+ #348
> Call Trace:
> inet_proto_csum_replace16+0x445/0x470
> set_ipv6_addr+0x3dd/0x460
> do_execute_actions+0x6a3d/0x7c40
> ovs_execute_actions+0xfd/0x480
> ovs_packet_cmd_execute+0xc38/0xf20
> genl_rcv_msg+0x59e/0x870
> netlink_rcv_skb+0x18b/0x450
> genl_rcv+0x2d/0x40
> netlink_unicast+0x6bc/0xa20
>
> The buggy address belongs to the object at ffff88810b754980
> which belongs to the cache skbuff_small_head of size 704
> The buggy address is located 390 bytes inside of
> freed 704-byte region [ffff88810b754980, ffff88810b754c40)
>
> Other callers use that offset too, so bound it here rather than in one
> caller.
>
> Reject a header whose declared length does not fit in the packet.
> ipv6_find_hdr() already fails with -EBADMSG on a malformed chain, so this
> adds no new failure mode.
>
> Fixes: f8f626754ebe ("ipv6: Move ipv6_find_hdr() out of Netfilter code.")
Blaming b777e0ce7437 would be more accurate, but it doesn't matter in
practice given that f8f626754ebe is from 2012.
> Suggested-by: Ilya Maximets <i.maximets@ovn.org>
> Suggested-by: Eric Dumazet <edumazet@google.com>
> Cc: stable@vger.kernel.org
> Assisted-by: LLM
> Signed-off-by: Norbert Szetei <norbert@doyensec.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
next prev parent reply other threads:[~2026-09-17 15:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 19:57 [PATCH net v2] ipv6: do not let ipv6_find_hdr() return an offset past the packet end Norbert Szetei
2026-09-17 15:57 ` Ido Schimmel [this message]
2026-09-18 17:23 ` Ilya Maximets
2026-09-19 0:10 ` patchwork-bot+netdevbpf
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=20260917155741.GA1377171@shredder \
--to=idosch@nvidia.com \
--cc=aconole@redhat.com \
--cc=davem@davemloft.net \
--cc=dev@openvswitch.org \
--cc=dsahern@kernel.org \
--cc=echaudro@redhat.com \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=i.maximets@ovn.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=norbert@doyensec.com \
--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.