All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: syzbot <syzbot@kernel.org>,
	syzkaller-bugs@googlegroups.com,
	Krystian Kaniewski <krystianmkaniewski@gmail.com>,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	Matthew Wilcox <willy@infradead.org>,
	linux-kernel@vger.kernel.org, syzbot@lists.linux.dev
Subject: Re: [PATCH] xarray: fix index jumping backwards in xas_find()
Date: Fri, 4 Sep 2026 11:21:55 +0300	[thread overview]
Message-ID: <app_o87YogZExbwm@kernel.org> (raw)
In-Reply-To: <20260903112251.6114f91af953412d2355e5b3@linux-foundation.org>

On Thu, Sep 03, 2026 at 11:22:51AM -0700, Andrew Morton wrote:
> On Thu,  3 Sep 2026 13:48:55 +0000 (UTC) "syzbot" <syzbot@kernel.org> wrote:
> 
> > From: Krystian Kaniewski <krystianmkaniewski@gmail.com>
> > 
> > A bug in the XArray iterator xas_find() causes the iterator's index
> > (xas->xa_index) to jump backwards when iterating over a multi-index entry
> > (like a THP) that resides in a non-leaf node and is concurrently split.
> > 
> > When iterating over a multi-index entry in a non-leaf node, xas_load() sets
> > xas->xa_offset to the base offset of the entry, but leaves xas->xa_index at
> > the requested index. When the caller subsequently wants to advance to the
> > next entry, xas_find() is called. xas_find() attempts to synchronize
> > xas->xa_offset with xas->xa_index before advancing. However, the fixup
> > logic was incorrectly restricted to leaf nodes (!xas->xa_node->shift).
> > Because the THP resides in a non-leaf node, the fixup is skipped.
> > 
> > As a result, xas_find() simply increments xas->xa_offset and recalculates
> > xas->xa_index based on this new offset. This causes xas->xa_index to jump
> > backwards. If the THP was concurrently split, the entry at the new offset
> > is a node pointer, so xas_find() descends into it and returns the folio at
> > the backwards index. The caller (filemap_map_pages()) then calculates the
> > PTE pointer based on this backwards index, resulting in an invalid memory
> > access such as an out-of-bounds read or use-after-free on a page-table page
> > freed via tlb_remove_table_rcu().
> > 
> > To fix this, check if xas->xa_offset matches get_offset(xas->xa_index,
> > xas->xa_node). If it does not and the node is a non-leaf node, set
> > xas->xa_offset to get_offset(xas->xa_index, xas->xa_node) before advancing.
> > Also add test cases in test_xarray to verify xas_find() behavior when
> > iterating over and splitting multi-index entries.
> 
> Thanks.  But the changelog omits vital information: a description of
> the userspace-visible runtime effects of the bug.
> 
> > Fixes: b803b42823d0 ("xarray: Add XArray iterators")
> > Assisted-by: Gemini:gemini-3.7-flash syzbot
> > Reported-by: syzbot+b72767277f29b6407083@syzkaller.appspotmail.com
> > Closes: https://syzkaller.appspot.com/bug?extid=b72767277f29b6407083
> 
> I see from there that it was a use-after-free, detected by KASAN.  I'll
> update the changelog and I'll add cc:stable.
> 
> I'll queue the patch for testing while awaiting review input.

The testing shows there are issues with this patch:

https://github.com/linux-mm/linux-mm/actions/runs/33815757662/job/100847425973

And since it's in mm-unstable now it breaks all CI jobs :(

> > Link: https://syzkaller.appspot.com/ai_job?id=a01c56bd-74d0-411c-afb4-ee6f0cb6cb61
> 
> 

-- 
Sincerely yours,
Mike.

  reply	other threads:[~2026-09-04  8:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-03 13:48 [PATCH] xarray: fix index jumping backwards in xas_find() syzbot
2026-09-03 18:22 ` Andrew Morton
2026-09-04  8:21   ` Mike Rapoport [this message]
2026-09-04  8:41     ` Krystian Kaniewski
2026-09-04 12:16       ` Krystian Kaniewski
2026-09-04 12:12     ` [PATCH v2] " Krystian Kaniewski

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=app_o87YogZExbwm@kernel.org \
    --to=rppt@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=krystianmkaniewski@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=syzbot@kernel.org \
    --cc=syzbot@lists.linux.dev \
    --cc=syzkaller-bugs@googlegroups.com \
    --cc=willy@infradead.org \
    /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.