All of lore.kernel.org
 help / color / mirror / Atom feed
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!

      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.