{"api_version":"1","generated_at":"2026-10-01T07:41:46+00:00","cve":"CVE-2026-97547","urls":{"html":"https://cve.report/CVE-2026-97547","api":"https://cve.report/api/cve/CVE-2026-97547.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-97547","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-97547"},"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-09-25 11:17:05","updated_at":"2026-09-25 11:17:05"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/56f87ac2b9543be2be529b831666682e6df4bc40","name":"https://git.kernel.org/stable/c/56f87ac2b9543be2be529b831666682e6df4bc40","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/a23eca88448e52eb1a81549862df7adce794fafb","name":"https://git.kernel.org/stable/c/a23eca88448e52eb1a81549862df7adce794fafb","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/fac32b9950a2aab3f8659d23b2947b8fb305c3fe","name":"https://git.kernel.org/stable/c/fac32b9950a2aab3f8659d23b2947b8fb305c3fe","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/8ae30b9a8c207f9bd03a98eda7b5d641daa79bdb","name":"https://git.kernel.org/stable/c/8ae30b9a8c207f9bd03a98eda7b5d641daa79bdb","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-97547","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-97547","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca 56f87ac2b9543be2be529b831666682e6df4bc40 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca fac32b9950a2aab3f8659d23b2947b8fb305c3fe git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca 8ae30b9a8c207f9bd03a98eda7b5d641daa79bdb git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 966ceafc7a437105ecfe1cadb3747b2965a260ca a23eca88448e52eb1a81549862df7adce794fafb 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.111 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.53 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.7 7.2.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.3-rc3 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"97547","cve":"CVE-2026-97547","epss":"0.002000000","percentile":"0.088100000","score_date":"2026-09-27","updated_at":"2026-09-28 00:02:24"},"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":"56f87ac2b9543be2be529b831666682e6df4bc40","status":"affected","version":"966ceafc7a437105ecfe1cadb3747b2965a260ca","versionType":"git"},{"lessThan":"fac32b9950a2aab3f8659d23b2947b8fb305c3fe","status":"affected","version":"966ceafc7a437105ecfe1cadb3747b2965a260ca","versionType":"git"},{"lessThan":"8ae30b9a8c207f9bd03a98eda7b5d641daa79bdb","status":"affected","version":"966ceafc7a437105ecfe1cadb3747b2965a260ca","versionType":"git"},{"lessThan":"a23eca88448e52eb1a81549862df7adce794fafb","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.111","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.53","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.7","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.3-rc3","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.111","versionStartIncluding":"6.10","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.53","versionStartIncluding":"6.10","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2.7","versionStartIncluding":"6.10","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.3-rc3","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."}],"providerMetadata":{"dateUpdated":"2026-09-25T10:21:41.636Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/56f87ac2b9543be2be529b831666682e6df4bc40"},{"url":"https://git.kernel.org/stable/c/fac32b9950a2aab3f8659d23b2947b8fb305c3fe"},{"url":"https://git.kernel.org/stable/c/8ae30b9a8c207f9bd03a98eda7b5d641daa79bdb"},{"url":"https://git.kernel.org/stable/c/a23eca88448e52eb1a81549862df7adce794fafb"}],"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-97547","datePublished":"2026-09-25T10:21:41.636Z","dateReserved":"2026-09-24T16:01:01.154Z","dateUpdated":"2026-09-25T10:21:41.636Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-09-25 11:17:05","lastModifiedDate":"2026-09-25 11:17:05","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"97547","Ordinal":"1","Title":"xfs: fix exchange-range reflink flag clearing issue with INO1_WR","CVE":"CVE-2026-97547","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"97547","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"}]}}}