CVE-2026-98443 (GCVE-0-2026-98443)

Vulnerability from cvelistv5 – Published: 2026-10-18 15:14 – Updated: 2026-10-24 14:08
VLAI
Title
xfs: fix cursor and pointer handling when recovering iunlink buckets
Summary
In the Linux kernel, the following vulnerability has been resolved: xfs: fix cursor and pointer handling when recovering iunlink buckets LOLLM pointed out a bug in xlog_recover_iunlink_bucket: 1. We don't null out prev_ip after releasing it, which can lead to UAF problems if the inodegc flush call in the loop fails. at which point I noticed even more bugs: 2. If the inodegc flush inside the loop fails, we also leak @ip. 3. We set prev_agino to agino having already advanced agino, which results in inodes with i_prev_unlinked set to itself. 4. If we exit the bottom of the loop with prev_ip set, then prev_ip aliases ip and we also set its i_prev_unlinked to itself. Bugs 3 and 4 introduce loops into the unlinked list, though these loops don't surface because we immediately flush each unlinked inode after loading it. Fix all of these issues.
Assigner
Linux CNA under the mitre root
CNA scorecard D 53/100 over 7056 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 04755d2e5821b3afbaadd09fe5df58d04de36484 , < 47a948ba653a463d429e02fda2f06a3d6b78666d (git)
Affected: 04755d2e5821b3afbaadd09fe5df58d04de36484 , < 8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1 (git)
Affected: 04755d2e5821b3afbaadd09fe5df58d04de36484 , < 66a2179d02668f8df44b1a249899006f3ba38ea0 (git)
Affected: 04755d2e5821b3afbaadd09fe5df58d04de36484 , < 961c717e6bf0e53c2c2b1fe4aef1add9390fedab (git)
Affected: 04755d2e5821b3afbaadd09fe5df58d04de36484 , < 65f39d09d73718611cee40399179323b5d4ead00 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.0
Unaffected: 0 , < 6.0 (semver)
Unaffected: 6.6.160 , ≤ 6.6.* (semver)
Unaffected: 6.12.113 , ≤ 6.12.* (semver)
Unaffected: 6.18.55 , ≤ 6.18.* (semver)
Unaffected: 7.2.9 , ≤ 7.2.* (semver)
Unaffected: 7.3 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/xfs/xfs_log_recover.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "47a948ba653a463d429e02fda2f06a3d6b78666d",
              "status": "affected",
              "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
              "versionType": "git"
            },
            {
              "lessThan": "8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1",
              "status": "affected",
              "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
              "versionType": "git"
            },
            {
              "lessThan": "66a2179d02668f8df44b1a249899006f3ba38ea0",
              "status": "affected",
              "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
              "versionType": "git"
            },
            {
              "lessThan": "961c717e6bf0e53c2c2b1fe4aef1add9390fedab",
              "status": "affected",
              "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
              "versionType": "git"
            },
            {
              "lessThan": "65f39d09d73718611cee40399179323b5d4ead00",
              "status": "affected",
              "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/xfs/xfs_log_recover.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.0"
            },
            {
              "lessThan": "6.0",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.160",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.113",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.55",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.9",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.160",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.113",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.55",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.9",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix cursor and pointer handling when recovering iunlink buckets\n\nLOLLM pointed out a bug in xlog_recover_iunlink_bucket:\n\n1. We don\u0027t null out prev_ip after releasing it, which can lead to UAF\n   problems if the inodegc flush call in the loop fails.\n\nat which point I noticed even more bugs:\n\n2. If the inodegc flush inside the loop fails, we also leak @ip.\n\n3. We set prev_agino to agino having already advanced agino, which\n   results in inodes with i_prev_unlinked set to itself.\n\n4. If we exit the bottom of the loop with prev_ip set, then prev_ip\n   aliases ip and we also set its i_prev_unlinked to itself.\n\nBugs 3 and 4 introduce loops into the unlinked list, though these loops\ndon\u0027t surface because we immediately flush each unlinked inode after\nloading it.\n\nFix all of these issues."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - Malformed agi_unlinked, di_next_unlinked, and inode-fork data enter from a local XFS image when mount(2) reaches xlog_recover_iunlink_bucket through xfs_log_mount_finish and xlog_recover_finish; no remote protocol carries these bytes.\nAC:L - The image author can create a dirty log, two inodes in one unlinked bucket, and corrupt external btree metadata that makes xfs_inactive fail through xfs_inodegc_flush. This deterministically enters the stale-prev_ip error path without requiring an uncontrollable hardware fault.\nPR:N - The attacker only creates and supplies the XFS image, requiring no target account or capability. XFS omits FS_USERNS_MOUNT, so the privileged mount_capable check applies to the interacting victim and is captured by UI:R.\nUI:R - A victim or administrator must mount the attacker-supplied dirty XFS image so xfs_log_mount_finish invokes xlog_recover_finish and the patched xlog_recover_iunlink_bucket.\nS:U - The stale xfs_inode and resulting memory corruption affect the mounting host kernel within its existing security authority; no VM, IOMMU, or other isolation boundary is crossed.\nC:H - After xfs_inodegc_flush makes prev_ip reclaimable, the stale pointer can reference an xfs_inode_cache object reclaimed and replaced before the second xfs_irele; reuse and secondary UAF of the replacement inode support kernel-memory disclosure.\nI:H - The second xfs_irele can decrement i_count in a reused xfs_inode, prematurely destroying a live replacement inode and producing secondary use-after-free memory corruption exploitable for control-flow hijacking.\nA:H - The stale xfs_irele can dereference a freed inode or underflow its reference count; DEBUG_VFS BUGs on the invalid inode state/count, while non-debug builds can corrupt a replacement inode and later oops or panic."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-24T14:08:51.954Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/47a948ba653a463d429e02fda2f06a3d6b78666d"
        },
        {
          "url": "https://git.kernel.org/stable/c/8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1"
        },
        {
          "url": "https://git.kernel.org/stable/c/66a2179d02668f8df44b1a249899006f3ba38ea0"
        },
        {
          "url": "https://git.kernel.org/stable/c/961c717e6bf0e53c2c2b1fe4aef1add9390fedab"
        },
        {
          "url": "https://git.kernel.org/stable/c/65f39d09d73718611cee40399179323b5d4ead00"
        }
      ],
      "title": "xfs: fix cursor and pointer handling when recovering iunlink buckets",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-98443",
    "datePublished": "2026-10-18T15:14:53.597Z",
    "dateReserved": "2026-09-25T10:25:14.349Z",
    "dateUpdated": "2026-10-24T14:08:51.954Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-98443",
      "date": "2026-10-25",
      "epss": "0.00135",
      "percentile": "0.02967"
    },
    "microsoft_vex": {
      "current_release_date": "2026-10-21T18:33:14.000Z",
      "cve": "CVE-2026-98443",
      "id": "msrc_CVE-2026-98443",
      "initial_release_date": "2026-10-20T01:03:11.000Z",
      "product_status:known_affected": "1",
      "product_status:under_investigation": "1",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "xfs: fix cursor and pointer handling when recovering iunlink buckets",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-98443.json",
      "version": "3"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "fs/xfs/xfs_log_recover.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "47a948ba653a463d429e02fda2f06a3d6b78666d",
                    "status": "affected",
                    "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1",
                    "status": "affected",
                    "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "66a2179d02668f8df44b1a249899006f3ba38ea0",
                    "status": "affected",
                    "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "961c717e6bf0e53c2c2b1fe4aef1add9390fedab",
                    "status": "affected",
                    "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "65f39d09d73718611cee40399179323b5d4ead00",
                    "status": "affected",
                    "version": "04755d2e5821b3afbaadd09fe5df58d04de36484",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "fs/xfs/xfs_log_recover.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.0"
                  },
                  {
                    "lessThan": "6.0",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.160",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.113",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.55",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.9",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix cursor and pointer handling when recovering iunlink buckets\n\nLOLLM pointed out a bug in xlog_recover_iunlink_bucket:\n\n1. We don\u0027t null out prev_ip after releasing it, which can lead to UAF\n   problems if the inodegc flush call in the loop fails.\n\nat which point I noticed even more bugs:\n\n2. If the inodegc flush inside the loop fails, we also leak @ip.\n\n3. We set prev_agino to agino having already advanced agino, which\n   results in inodes with i_prev_unlinked set to itself.\n\n4. If we exit the bottom of the loop with prev_ip set, then prev_ip\n   aliases ip and we also set its i_prev_unlinked to itself.\n\nBugs 3 and 4 introduce loops into the unlinked list, though these loops\ndon\u0027t surface because we immediately flush each unlinked inode after\nloading it.\n\nFix all of these issues."
          }
        ],
        "id": "CVE-2026-98443",
        "lastModified": "2026-10-24T14:16:42.230",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "REQUIRED",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-10-18T16:16:54.620",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/47a948ba653a463d429e02fda2f06a3d6b78666d"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/65f39d09d73718611cee40399179323b5d4ead00"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/66a2179d02668f8df44b1a249899006f3ba38ea0"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/961c717e6bf0e53c2c2b1fe4aef1add9390fedab"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-10-24T14:23:06+00:00",
      "cve": "CVE-2026-98443",
      "id": "CVE-2026-98443",
      "initial_release_date": "2026-10-18T00:00:00+00:00",
      "product_status:known_affected": "199",
      "product_status:known_not_affected": "79",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: xfs: fix cursor and pointer handling when recovering iunlink buckets",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-98443.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-10-20T23:51:15Z",
      "cve": "CVE-2026-98443",
      "id": "CVE-2026-98443",
      "initial_release_date": "2026-10-18T23:46:46Z",
      "product_status:known_affected": "62",
      "product_status:known_not_affected": "286",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-98443",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/2026/cve-2026-98443.json",
      "version": "3"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    Loading…

    Loading…

    Related by attack behaviour

    Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.