CVE-2026-31454 (GCVE-0-2026-31454)
Vulnerability from cvelistv5
Published
2026-04-22 13:53
Modified
2026-08-05 12:22
Summary
In the Linux kernel, the following vulnerability has been resolved: xfs: save ailp before dropping the AIL lock in push callbacks In xfs_inode_item_push() and xfs_qm_dquot_logitem_push(), the AIL lock is dropped to perform buffer IO. Once the cluster buffer no longer protects the log item from reclaim, the log item may be freed by background reclaim or the dquot shrinker. The subsequent spin_lock() call dereferences lip->li_ailp, which is a use-after-free. Fix this by saving the ailp pointer in a local variable while the AIL lock is held and the log item is guaranteed to be valid.
Impacted products
Vendor Product Version
Linux Linux Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Version: 90c60e16401248a4900f3f9387f563d0178dcf34
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/xfs/xfs_dquot_item.c",
            "fs/xfs/xfs_inode_item.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "edd1637d4e3911ab6c760f553f2040fe72f61a13",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            },
            {
              "lessThan": "19437e4f7bb909afde832b39372aa2f3ce3cfd88",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            },
            {
              "lessThan": "6dbe17f19c290a72ce57d5abc70e1fad0c3e14e5",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            },
            {
              "lessThan": "75669e987137f49c99ca44406bf0200d1892dd16",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            },
            {
              "lessThan": "d8fc60bbaf5aea1604bf9f4ed565da6a1ac7a87d",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            },
            {
              "lessThan": "50f5f056807b7bed74f4f307f2ca0ed92f3e556d",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            },
            {
              "lessThan": "4c7d50147316cf049462f327c4a3e9dc2b7f1dd0",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            },
            {
              "lessThan": "394d70b86fae9fe865e7e6d9540b7696f73aa9b6",
              "status": "affected",
              "version": "90c60e16401248a4900f3f9387f563d0178dcf34",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/xfs/xfs_dquot_item.c",
            "fs/xfs/xfs_inode_item.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.9"
            },
            {
              "lessThan": "5.9",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.253",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.203",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.168",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.131",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.80",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.21",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.19.*",
              "status": "unaffected",
              "version": "6.19.11",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.0",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.253",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.203",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.168",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.131",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.80",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.21",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.19.11",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.0",
                  "versionStartIncluding": "5.9",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: save ailp before dropping the AIL lock in push callbacks\n\nIn xfs_inode_item_push() and xfs_qm_dquot_logitem_push(), the AIL lock\nis dropped to perform buffer IO. Once the cluster buffer no longer\nprotects the log item from reclaim, the log item may be freed by\nbackground reclaim or the dquot shrinker. The subsequent spin_lock()\ncall dereferences lip-\u003eli_ailp, which is a use-after-free.\n\nFix this by saving the ailp pointer in a local variable while the AIL\nlock is held and the log item is guaranteed to be valid."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerable XFS AIL push callbacks are reached through local filesystem activity on a mounted XFS filesystem, such as creating, modifying, unlinking, or quota-affecting files. There is no direct network or physical protocol entry point in XFS for this bug.\nAC:L - The race is between xfsaild dropping the AIL lock and inode/dquot reclaim freeing the log item, and an attacker can drive both sides with filesystem churn, AIL pressure, and memory pressure. Syzkaller reproduced this as a kernel slab use-after-free, so no rare external condition is required.\nPR:L - A basic unprivileged local user with write access to an existing XFS filesystem can generate inode and dquot log items through normal VFS operations; no XFS-specific CAP_SYS_ADMIN ioctl path is required. XFS is not user-namespace mountable, but exploiting an already mounted writable XFS filesystem does not require real root.\nUI:N - No victim action is needed beyond the attacker issuing local filesystem operations. The vulnerable callback runs asynchronously in the per-mount xfsaild kernel thread.\nS:U - The impact remains within the same kernel security authority. This is a standard local kernel memory-safety issue, not a guest-to-host or cross-sandbox boundary bypass by itself.\nC:H - The bug is a kernel slab use-after-free of XFS log-item memory after reclaim can free the object. Conservatively, kernel UAFs can be shaped for memory disclosure, so confidentiality impact is high.\nI:H - The stale log item is dereferenced after free and used to reacquire a spinlock through data read from freed memory, making this a plausible kernel memory corruption primitive. Following the required overestimate rule for UAFs, integrity impact is high.\nA:H - The observed failure is a KASAN slab-use-after-free in xfs_inode_item_push from xfsaild, which can crash or destabilize the kernel. Repeated triggering can therefore cause high availability impact."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:22:43.178Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/edd1637d4e3911ab6c760f553f2040fe72f61a13"
        },
        {
          "url": "https://git.kernel.org/stable/c/19437e4f7bb909afde832b39372aa2f3ce3cfd88"
        },
        {
          "url": "https://git.kernel.org/stable/c/6dbe17f19c290a72ce57d5abc70e1fad0c3e14e5"
        },
        {
          "url": "https://git.kernel.org/stable/c/75669e987137f49c99ca44406bf0200d1892dd16"
        },
        {
          "url": "https://git.kernel.org/stable/c/d8fc60bbaf5aea1604bf9f4ed565da6a1ac7a87d"
        },
        {
          "url": "https://git.kernel.org/stable/c/50f5f056807b7bed74f4f307f2ca0ed92f3e556d"
        },
        {
          "url": "https://git.kernel.org/stable/c/4c7d50147316cf049462f327c4a3e9dc2b7f1dd0"
        },
        {
          "url": "https://git.kernel.org/stable/c/394d70b86fae9fe865e7e6d9540b7696f73aa9b6"
        }
      ],
      "title": "xfs: save ailp before dropping the AIL lock in push callbacks",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-31454",
    "datePublished": "2026-04-22T13:53:48.242Z",
    "dateReserved": "2026-03-09T15:48:24.091Z",
    "dateUpdated": "2026-08-05T12:22:43.178Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…