CVE-2026-89639
moderateStale FS-Cache data served after O_TRUNC in Linux kernel CIFS client
A cache-coherence flaw in the Linux kernel's CIFS/SMB client (fs/smb/client) allowed stale FS-Cache data to be served after a file was opened with O_TRUNC on an fscache-enabled CIFS mount. cifs_do_truncate() is invoked from cifs_open() without holding i_rwsem, so it could not perform a proper fscache cookie resize, and the pre-truncation cached data was never invalidated; once the cookie was later activated by fscache_use_cookie(), reads could return data that should have been discarded. A local, low-privileged user able to open files on such a mount could read back stale content that should no longer exist (confidentiality impact) and cause applications to act on incorrect cached data (integrity impact), with no availability impact. Only Linux systems mounting SMB shares with FS-Cache enabled are affected; most CIFS mounts without the caching option are not. The flaw was fixed upstream by calling cifs_invalidate_cache() after cifs_setsize(), and there is no known public PoC or exploitation in the wild.
What to do: Update to a kernel release that includes the fix (the cifs_invalidate_cache() call added to cifs_do_truncate()); distributions will ship it through their stable kernel update channels. If patching is delayed, remount CIFS/SMB shares without FS-Cache (remove the fsc or cache= mount option) to eliminate the vulnerable code path. Review any cached CIFS-mounted systems where applications open files with O_TRUNC for signs they acted on stale file contents.
| Linux kernel (CIFS/SMB client, fs/smb/client, with FS-Cache enabled) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: cifs: use cifs_invalidate_cache() in cifs_do_truncate() for O_TRUNC cifs_do_truncate() is invoked from cifs_open() without i_rwsem, so it cannot use cifs_resize_file_locked() to perform a proper fscache cookie resize. Instead, add cifs_invalidate_cache() after cifs_setsize(). cifs_invalidate_cache() calls fscache_invalidate(), which works without holding i_rwsem: it unconditionally increments inval_counter and sets FSCACHE_COOKIE_NO_DATA_TO_READ, ensuring that stale cached data is not served once the cookie is later activated by fscache_use_cookie(). Truncation to zero leaves no valid cached data, making invalidation the correct semantic here.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
In the news0 stories
No ingested article mentions this CVE yet.