CVE-2026-74591: mm/filemap: __filemap_add_folio() restore index before retrying

Published Aug 22, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

mm/filemap: filemapaddfolio() restore index before retrying

In filemapaddfolio()'s split-a-conflict loop, xassetorder() is applied repeatedly: each application modifies xas.xaindex, rounding it down according to the splitorder attempted at that stage: and if all goes as intended, it eventually (or immediately) converges on an xastrysplit() to the required folioorder, with xas.xaindex now the same as index: then xasstore() puts the new folio into the xarray there.

But if a new node was needed, and GFPNOWAIT allocation did not get one, the lock is dropped, xasnomem() used to allocate, and sequence retried. If (that part of) the xarray is unchanged when the lock is reacquired, no problem. But what if the conflict was meanwhile resolved by another thread (perhaps even doing the same thing, inserting a folio at that same index)? Isn't there a danger of now putting our folio into the xarray at an intermediate rounded-down index? With !foliocontains() bug to follow, when CONFIGDEBUGVM=y is checking for that.

Fix this with an xassetorder() to restore the original xas.xaindex at the bottom of the loop, so the retry does a full re-evaluation after reacquiring the lock, and cannot reach xasstore() with the wrong index.

Production was suffering from rare SIGILLs and SIGSEGVs, executable text found a page away from where it belonged, !foliocontains() bug hit when debug enabled: symptoms not seen since this patch went in.

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade Linux kernel mm/filemap (__filemap_add_folio()) to a version that resolves this vulnerability.

    Patch mm/filemap: __filemap_add_folio() restore index before retrying
  2. Compensating control

    If applicable, ensure kernels are built with CONFIG_DEBUG_VM=y during testing/diagnostics, since CONFIG_DEBUG_VM=y is described as checking for the erroneous index placement and related symptoms.

Event History

Aug 22, 2026
CVE Published
via MITRE·03:31 PM
Data Sourced
via MITRE·03:31 PM
Description

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203