{"api_version":"1","generated_at":"2026-08-27T14:03:12+00:00","cve":"CVE-2026-80530","urls":{"html":"https://cve.report/CVE-2026-80530","api":"https://cve.report/api/cve/CVE-2026-80530.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-80530","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-80530"},"summary":{"title":"xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN\n\nWhen exchanging two full-file ranges, xmi_can_exchange_reflink_flags()\ncan move the reflink inode flag from the file that currently has it to\nthe other file, as long as exactly one side is marked.  This assumes\nthat the file contents, and therefore all shared extents, are exchanged.\n\nThat assumption is not true when XFS_EXCHMAPS_INO1_WRITTEN is set.\nxfs_exchmaps_can_skip_mapping() can skip hole and unwritten mappings\nfrom file1, so an exchange can complete without moving every mapping\nthat the earlier flag-swap decision accounted for.  In that case the\npost-operation cleanup can clear the reflink flag from an inode that\nstill owns shared written extents.  Later writes then take the\nnon-reflink write path and may update blocks that should still have\nbeen protected by CoW, which shows up as data corruption between\nreflink-related files.\n\nFix this by disabling the reflink flag exchange whenever\nXFS_EXCHMAPS_INO1_WRITTEN is requested.  The contents exchange can still\nproceed; the conservative outcome is that both inodes keep the reflink\nflag.  The regular reflink flag cleanup path can drop the extra flag\nlater once the inode no longer has shared extents.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-08-26 15:17:06","updated_at":"2026-08-27 06:17:33"},"problem_types":[],"metrics":[{"version":"3.1","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","score":"7.1","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","baseScore":7.1,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"NONE"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"7.1","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","data":{"baseScore":7.1,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","version":"3.1"}}],"references":[{"url":"https://git.kernel.org/stable/c/03c9c9116e6da641424681f705698d7f5e2128e0","name":"https://git.kernel.org/stable/c/03c9c9116e6da641424681f705698d7f5e2128e0","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/b2d5a81dae385333f9734910277fbf94c78bd17f","name":"https://git.kernel.org/stable/c/b2d5a81dae385333f9734910277fbf94c78bd17f","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/0f27b22343b63e10773e6781344640c2c753eec3","name":"https://git.kernel.org/stable/c/0f27b22343b63e10773e6781344640c2c753eec3","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/2efbd8890b53f4756fdc7b0ef346fa514ffb7d66","name":"https://git.kernel.org/stable/c/2efbd8890b53f4756fdc7b0ef346fa514ffb7d66","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-80530","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-80530","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca 2efbd8890b53f4756fdc7b0ef346fa514ffb7d66 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca 0f27b22343b63e10773e6781344640c2c753eec3 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca 03c9c9116e6da641424681f705698d7f5e2128e0 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca b2d5a81dae385333f9734910277fbf94c78bd17f git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.10","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.10 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.105 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.46 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1.10 7.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["fs/xfs/libxfs/xfs_exchmaps.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"2efbd8890b53f4756fdc7b0ef346fa514ffb7d66","status":"affected","version":"966ceafc7a437105ecfe1cadb3747b2965a260ca","versionType":"git"},{"lessThan":"0f27b22343b63e10773e6781344640c2c753eec3","status":"affected","version":"966ceafc7a437105ecfe1cadb3747b2965a260ca","versionType":"git"},{"lessThan":"03c9c9116e6da641424681f705698d7f5e2128e0","status":"affected","version":"966ceafc7a437105ecfe1cadb3747b2965a260ca","versionType":"git"},{"lessThan":"b2d5a81dae385333f9734910277fbf94c78bd17f","status":"affected","version":"966ceafc7a437105ecfe1cadb3747b2965a260ca","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["fs/xfs/libxfs/xfs_exchmaps.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"6.10"},{"lessThan":"6.10","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.105","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.46","versionType":"semver"},{"lessThanOrEqual":"7.1.*","status":"unaffected","version":"7.1.10","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.2","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.105","versionStartIncluding":"6.10","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.46","versionStartIncluding":"6.10","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.1.10","versionStartIncluding":"6.10","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2","versionStartIncluding":"6.10","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN\n\nWhen exchanging two full-file ranges, xmi_can_exchange_reflink_flags()\ncan move the reflink inode flag from the file that currently has it to\nthe other file, as long as exactly one side is marked.  This assumes\nthat the file contents, and therefore all shared extents, are exchanged.\n\nThat assumption is not true when XFS_EXCHMAPS_INO1_WRITTEN is set.\nxfs_exchmaps_can_skip_mapping() can skip hole and unwritten mappings\nfrom file1, so an exchange can complete without moving every mapping\nthat the earlier flag-swap decision accounted for.  In that case the\npost-operation cleanup can clear the reflink flag from an inode that\nstill owns shared written extents.  Later writes then take the\nnon-reflink write path and may update blocks that should still have\nbeen protected by CoW, which shows up as data corruption between\nreflink-related files.\n\nFix this by disabling the reflink flag exchange whenever\nXFS_EXCHMAPS_INO1_WRITTEN is requested.  The contents exchange can still\nproceed; the conservative outcome is that both inodes keep the reflink\nflag.  The regular reflink flag cleanup path can drop the extra flag\nlater once the inode no longer has shared extents."}],"metrics":[{"cvssV3_1":{"baseScore":7.1,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","version":"3.1"},"scenarios":[{"lang":"en","value":"AV:L - The flaw is only reachable via xfs_ioc_exchange_range()/xfs_ioc_commit_range() through XFS_IOC_EXCHANGE_RANGE or XFS_IOC_COMMIT_RANGE ioctl on open XFS file descriptors; there is no nfsd, ksmbd, or network packet path to xfs_exchmaps_clear_reflink().\nAC:L - A local attacker can craft reflinked files with hole/unwritten mappings, open both files read-write, and call exchange-range with XFS_EXCHANGE_RANGE_FILE1_WRITTEN|TO_EOF to deterministically skip mappings and trigger incorrect post-op reflink-flag clearing.\nPR:L - XFS_IOC_EXCHANGE_RANGE has no CAP_SYS_ADMIN gate and only requires DAC write on both exchanged files plus read access to reflink-clone a victim file; unprivileged users on shared multi-tenant XFS mounts meet this without init-namespace root.\nUI:N - Exploitation requires only the attacker's own ioctl calls on files they control; no separate victim must mount media, click prompts, or perform actions beyond storing readable data the attacker reflinks.\nS:U - Impact is on-disk data corruption or commingling between reflink-linked files within the same host kernel/filesystem authority; it does not cross VM, container network, or IOMMU boundaries like a hypervisor escape.\nC:H - Clearing the reflink inode flag while shared written extents remain breaks CoW isolation, so subsequent non-reflink writes can commingle or overwrite blocks still linked to other users' reflink clones, leaking data CoW should have kept private.\nI:H - After the incorrect reflink-flag clear, writes take the non-reflink path and directly modify shared storage blocks, letting an attacker corrupt content in other users' reflink-linked files without write permission to those inodes.\nA:N - The failure is logical metadata mishandling causing cross-file data corruption; it does not trigger kernel oops, panic, BUG_ON, or hang, and the fix commit describes only data corruption between reflink-related files, not system unavailability."}]}],"providerMetadata":{"dateUpdated":"2026-08-27T05:01:24.159Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/2efbd8890b53f4756fdc7b0ef346fa514ffb7d66"},{"url":"https://git.kernel.org/stable/c/0f27b22343b63e10773e6781344640c2c753eec3"},{"url":"https://git.kernel.org/stable/c/03c9c9116e6da641424681f705698d7f5e2128e0"},{"url":"https://git.kernel.org/stable/c/b2d5a81dae385333f9734910277fbf94c78bd17f"}],"title":"xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-80530","datePublished":"2026-08-26T14:37:07.990Z","dateReserved":"2026-08-26T14:34:25.764Z","dateUpdated":"2026-08-27T05:01:24.159Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-08-26 15:17:06","lastModifiedDate":"2026-08-27 06:17:33","problem_types":[],"metrics":{"cvssMetricV31":[{"source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","baseScore":7.1,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"NONE"},"exploitabilityScore":1.8,"impactScore":5.2}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"80530","Ordinal":"1","Title":"xfs: fix exchange-range reflink flag clearing issue with INO1_WR","CVE":"CVE-2026-80530","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"80530","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN\n\nWhen exchanging two full-file ranges, xmi_can_exchange_reflink_flags()\ncan move the reflink inode flag from the file that currently has it to\nthe other file, as long as exactly one side is marked.  This assumes\nthat the file contents, and therefore all shared extents, are exchanged.\n\nThat assumption is not true when XFS_EXCHMAPS_INO1_WRITTEN is set.\nxfs_exchmaps_can_skip_mapping() can skip hole and unwritten mappings\nfrom file1, so an exchange can complete without moving every mapping\nthat the earlier flag-swap decision accounted for.  In that case the\npost-operation cleanup can clear the reflink flag from an inode that\nstill owns shared written extents.  Later writes then take the\nnon-reflink write path and may update blocks that should still have\nbeen protected by CoW, which shows up as data corruption between\nreflink-related files.\n\nFix this by disabling the reflink flag exchange whenever\nXFS_EXCHMAPS_INO1_WRITTEN is requested.  The contents exchange can still\nproceed; the conservative outcome is that both inodes keep the reflink\nflag.  The regular reflink flag cleanup path can drop the extra flag\nlater once the inode no longer has shared extents.","Type":"Description","Title":"xfs: fix exchange-range reflink flag clearing issue with INO1_WR"}]}}}