Re: [PATCH] mm/swap: fix swap_cache_get_folio() returning a folio that left the swap cache

From: Jiayuan Chen

Date: Thu Oct 15 2026 - 22:15:11 EST


Hi Andrew,

On 10/16/26 9:40 AM, Andrew Morton wrote:
On Thu, 15 Oct 2026 14:05:27 +0800 Jiayuan Chen <jiayuan.chen@xxxxxxxxx> wrote:

[...]

So CPU 0 writes to a folio it doesn't own: it may clear PG_readahead and
takes the folio lock of someone else's page, before
folio_matches_swap_entry() finds out the folio is not ours.

Recheck the slot after folio_try_get() and retry if it no longer holds
this folio.
Thanks.

As always, when fixing a bug please fully describe the worst-case
userspace-visible runtime effects of that bug.

I asked $LLM for this and was told

: When the race occurs, a swap fault can acquire a reference to a
: physical page that has been freed and reused for an unrelated purpose,
: potentially by another process. The fault handler may then clear that
: page's PG_readahead/PG_reclaim flag, wait on or acquire its folio lock,
: and potentially attempt to remove it from an unrelated swap cache.
:
: These operations can interfere with unrelated workloads and may cause
: unexpected stalls, impaired reclaim or writeback, and potentially
: system hangs. The subsequent swap-entry validation normally prevents


I don't see a way to a system hang: the folio lock waiter is woken when
the real owner unlocks, so the worst case is a stall. I suggest
dropping "and potentially system hangs".


Writeback itself is not affected, only the PG_reclaim hint on where to
put the folio after writeback. So "impaired reclaim or writeback" ->
"impaired reclaim".

So I'd suggest:

  : When the race occurs, a swap fault can acquire a reference to a
  : physical page that has been freed and reused for an unrelated purpose,
  : potentially by another process.  The fault handler may then clear that
  : page's PG_readahead/PG_reclaim flag, wait on or acquire its folio lock,
  : and potentially attempt to remove it from an unrelated swap cache.
  :
  : These operations can interfere with unrelated workloads and may cause
  : unexpected stalls and impaired reclaim.  The subsequent swap-entry
  : validation normally prevents the wrong folio from being mapped into
  : the faulting process, and neither data corruption nor a kernel crash
  : has been demonstrated.


: the wrong folio from being mapped into the faulting process, and
: neither data corruption nor a kernel crash has been demonstrated.

Do you agree with this? OK with me adding this to your changelog?

Fixes: 8578e0c00dcf ("mm, swap: use the swap table for the swap cache and switch API")
Given the above, I suggest adding cc:stable.

Do you and maintainers agree?


Agreed for me.