CVE-2026-98684: smb: client: flush and commit data before querying allocated ranges
In the Linux kernel, the following vulnerability has been resolved:
smb: client: flush and commit data before querying allocated ranges
The mode 0 / FALLOCFLKEEPSIZE fallocate emulation for small interior ranges in smb3simplefallocaterange() issues FSCTLQUERYALLOCATEDRANGES and zero-fills any sub-range the server reports as an unallocated hole, to force block allocation without changing file contents.
This is unsafe against Windows servers. Per the Win32 documentation, FSCTLQUERYALLOCATEDRANGES only reports ranges that may contain nonzero data and is explicitly not coherent with recently written data:
"a call to FSCTLQUERYALLOCATEDRANGES [after writing to a network file] would not necessarily return a correct list of allocated regions. To ensure coherency [...] flush the data to the file"
fsx (generic/363) reproduces the resulting corruption against Windows Server 2022: a range is written, an uncached read returns the data, yet the next FSCTLQUERYALLOCATEDRANGES on that range reports it as a whole hole, so the emulation overwrites live data with zeroes. A network trace confirmed the WRITE, the READ returning data and the query returning an empty range list within microseconds. Samba does not exhibit this; its query is coherent with the written data.
Write back the dirty pages, drain any outstanding I/O and issue an SMB2 FLUSH to force the server to commit the data before querying the allocated ranges, so the query reflects the data actually present.
With this, generic/363 passes against both Windows Server 2022 and Samba over 100000 fsx operations.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.12.117 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.18.56 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 7.2.10 - Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 7.2.10-1 - Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 7.2.15-1Fixed in 7.3.3-1 - Compensating control
Before issuing FSCTL_QUERY_ALLOCATED_RANGES, write back dirty pages, drain outstanding I/O, and issue an SMB2 FLUSH so the server commits the data and the allocated-range query reflects the data actually present.
Event History
Frequently Asked Questions
Which deployments are exposed to data corruption?
Linux SMB clients are exposed when they emulate mode 0 FALLOC_FL_KEEP_SIZE fallocate for small interior file ranges against Windows servers. The unsafe path can overwrite live file data with zeroes.
What conditions trigger the corruption?
The client writes data and then queries allocated ranges before the written data has been flushed and committed to the server. A Windows server can report that range as an unallocated hole even though an uncached read still returns the written data, causing the emulation to zero-fill it.
How can an affected system be identified or reproduced?
The issue is reproduced by fsx generic/363 against Windows Server 2022. The observed sequence is a WRITE, an uncached READ that returns the data, followed by FSCTL_QUERY_ALLOCATED_RANGES returning an empty range list for that same range.