Skip to content
Heist/ feed
Back to feed
HighFix available

xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN When exchanging two full-file ranges, xmi_can_exchange_reflink_flags() can move the reflink inode flag from the file that currently has it to the other file, as long as exactly one side is marked. This assumes that the file contents, and therefore all shared extents, are exchanged. That assumption is not true when XFS_EXCHMAPS_INO1_WRITTEN is set. xfs_exchmaps_can_skip_mapping() can skip hole and unwritten mappings from file1, so an exchange can complete without moving every mapping that the earlier flag-swap decision accounted for. In that case the post-operation cleanup can clear the reflink flag from an inode that still owns shared written extents. Later writes then take the non-reflink write path and may update blocks that should still have been protected by CoW, which shows up as data corruption between reflink-related files. Fix this by disabling the reflink flag exchange whenever XFS_EXCHMAPS_INO1_WRITTEN is requested. The contents exchange can still proceed; the conservative outcome is that both inodes keep the reflink flag. The regular reflink flag cleanup path can drop the extra flag later once the inode no longer has shared extents.

Products
Kernel
Affected versions
Not specified
Fixed versions
6.12.105, 6.18.46, 7.1.10
CVEs
CVE-2026-80530
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 13:18 UTC · Revision 1

Source evidence

xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN

core-osv · Original source

Published 26 Aug 2026, 14:37 UTC

In the Linux kernel, the following vulnerability has been resolved: xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN When exchanging two full-file ranges, xmi_can_exchange_reflink_flags() can move the reflink inode flag from the file that currently has it to the other file, as long as exactly one side is marked. This assumes that the file contents, and therefore all shared extents, are exchanged. That assumption is not true when XFS_EXCHMAPS_INO1_WRITTEN is set. xfs_exchmaps_can_skip_mapping() can skip hole and unwritten mappings from file1, so an exchange can complete without moving every mapping that the earlier flag-swap decision accounted for. In that case the post-operation cleanup can clear the reflink flag from an inode that still owns shared written extents. Later writes then take the non-reflink write path and may update blocks that should still have been protected by CoW, which shows up as data corruption between reflink-related files. Fix this by disabling the reflink flag exchange whenever XFS_EXCHMAPS_INO1_WRITTEN is requested. The contents exchange can still proceed; the conservative outcome is that both inodes keep the reflink flag. The regular reflink flag cleanup path can drop the extra flag later once the inode no longer has shared extents.

osv:CVE-2026-80530

Kernel

Fixed versions: 6.12.105, 6.18.46, 7.1.10

Complete source record
{
  "id": "968cb5a7a9e96be67d32aaa9ceb9487c9719c97c48e71c3b55c78ea2e3ac4ed1",
  "url": "https://osv.dev/vulnerability/CVE-2026-80530",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN When exchanging two full-file ranges, xmi_can_exchange_reflink_flags() can move the reflink inode flag from the file that currently has it to the other file, as long as exactly one side is marked. This assumes that the file contents, and therefore all shared extents, are exchanged. That assumption is not true when XFS_EXCHMAPS_INO1_WRITTEN is set. xfs_exchmaps_can_skip_mapping() can skip hole and unwritten mappings from file1, so an exchange can complete without moving every mapping that the earlier flag-swap decision accounted for. In that case the post-operation cleanup can clear the reflink flag from an inode that still owns shared written extents. Later writes then take the non-reflink write path and may update blocks that should still have been protected by CoW, which shows up as data corruption between reflink-related files. Fix this by disabling the reflink flag exchange whenever XFS_EXCHMAPS_INO1_WRITTEN is requested. The contents exchange can still proceed; the conservative outcome is that both inodes keep the reflink flag. The regular reflink flag cleanup path can drop the extra flag later once the inode no longer has shared extents.",
    "evidence": "osv:CVE-2026-80530",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "6.12.105",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.18.46",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "7.1.10",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-80530",
      "aliases": [
        "CVE-2026-80530"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "966ceafc7a437105ecfe1cadb3747b2965a260ca"
                },
                {
                  "fixed": "2efbd8890b53f4756fdc7b0ef346fa514ffb7d66"
                },
                {
                  "fixed": "0f27b22343b63e10773e6781344640c2c753eec3"
                },
                {
                  "fixed": "03c9c9116e6da641424681f705698d7f5e2128e0"
                },
                {
                  "fixed": "b2d5a81dae385333f9734910277fbf94c78bd17f"
                }
              ]
            }
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80530.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.10.0"
                },
                {
                  "fixed": "6.12.105"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.18.46"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.19.0"
                },
                {
                  "fixed": "7.1.10"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80530.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:50.697378152Z",
      "provider": "osv",
      "references": [
        "https://git.kernel.org/stable/c/03c9c9116e6da641424681f705698d7f5e2128e0",
        "https://git.kernel.org/stable/c/0f27b22343b63e10773e6781344640c2c753eec3",
        "https://git.kernel.org/stable/c/2efbd8890b53f4756fdc7b0ef346fa514ffb7d66",
        "https://git.kernel.org/stable/c/b2d5a81dae385333f9734910277fbf94c78bd17f",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80530.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-80530",
        "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
      ],
      "provider_metadata": {
        "cna_assigner": "Linux",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80530.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-80530",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 519426,
  "published_at": "2026-08-26T14:37:07.99+00:00"
}