From: Steffen Klassert <steffen.klassert@secunet.com>
To: Roshan Kumar <roshaen09@gmail.com>
Cc: <netdev@vger.kernel.org>,
Herbert Xu <herbert@gondor.apana.org.au>,
Christian Hopps <chopps@labn.net>,
Sabrina Dubroca <sd@queasysnail.net>,
"David S . Miller" <davem@davemloft.net>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] xfrm: iptfs: fix stack OOB read in iptfs_skb_reset_frag_walk()
Date: Mon, 24 Aug 2026 06:58:58 +0200 [thread overview]
Message-ID: <aovPkmpvxHEwUIR9@secunet.com> (raw)
In-Reply-To: <20260728052608.2898018-1-roshaen09@gmail.com>
On Tue, Jul 28, 2026 at 10:56:08AM +0530, Roshan Kumar wrote:
> iptfs_skb_reset_frag_walk() advances to the fragment containing @offset
> with an unbounded loop:
>
> while (offset >= walk->past + walk->frags[walk->fragi].len)
> walk->past += walk->frags[walk->fragi++].len;
>
> walk->fragi is advanced and walk->frags[walk->fragi] is dereferenced
> without ever checking fragi against walk->nr_frags. When the requested
> offset is at or beyond the total length spanned by the walk's fragments,
> fragi runs past nr_frags and off the end of the fixed-size on-stack
> frags[MAX_SKB_FRAGS + 1] array, reading out-of-bounds stack memory.
>
> The two callers behave differently: iptfs_skb_add_frags() already guards
> against this with
>
> if (!walk->nr_frags ||
> offset >= walk->total + walk->initial_offset)
> return len;
>
> but iptfs_skb_can_add_frags() has no such guard and calls
> iptfs_skb_reset_frag_walk() unconditionally, so it performs the
> out-of-range walk. Its own "fragi < walk->nr_frags" bound check runs only
> afterwards, too late to prevent the read.
>
> This is reachable from the receive path: a crafted IP-TFS (AGGFRAG)
> payload delivered to an IPTFS SA drives iptfs_reassem_cont() ->
> iptfs_skb_can_add_frags() with an offset past the fragment total, e.g.:
>
> BUG: KASAN: stack-out-of-bounds in iptfs_skb_reset_frag_walk+0x235/0x250
> Read of size 4 at addr ffff888008ad7210 by task repro/345
> iptfs_skb_reset_frag_walk+0x235/0x250 net/xfrm/xfrm_iptfs.c:392
> iptfs_skb_can_add_frags+0x155/0x310 net/xfrm/xfrm_iptfs.c:420
> iptfs_reassem_cont+0xcf8/0x1140 net/xfrm/xfrm_iptfs.c:902
> iptfs_input_ordered+0x552/0x670 net/xfrm/xfrm_iptfs.c:1280
> iptfs_input+0x3d6/0xde0 net/xfrm/xfrm_iptfs.c:1741
> xfrm_input+0x282f/0x6140 net/xfrm/xfrm_input.c:700
> xfrm4_esp_rcv+0x93/0x120 net/ipv4/xfrm4_protocol.c:104
> ip_rcv+0x278/0x2d0 net/ipv4/ip_input.c:612
>
> Give iptfs_skb_can_add_frags() the same up-front guard that
> iptfs_skb_add_frags() already has, so the walk is never entered with an
> out-of-range offset. When it triggers, the caller falls back to the
> existing linearize-and-copy path, which is safe.
>
> Fixes: 5f2b6a909574 ("xfrm: iptfs: add skb-fragment sharing code")
> Reported-by: Roshan Kumar <roshaen09@gmail.com>
> Signed-off-by: Roshan Kumar <roshaen09@gmail.com>
Applied, thanks a lot!
prev parent reply other threads:[~2026-08-24 4:59 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-28 5:26 [PATCH] xfrm: iptfs: fix stack OOB read in iptfs_skb_reset_frag_walk() Roshan Kumar
2026-08-24 4:58 ` Steffen Klassert [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=aovPkmpvxHEwUIR9@secunet.com \
--to=steffen.klassert@secunet.com \
--cc=chopps@labn.net \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=roshaen09@gmail.com \
--cc=sd@queasysnail.net \
/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.