Linux: smb/client: invalidate fscache for fallocate range operations
What fixes it
- 93c6e5a8d7c5071d586c1411596d5db5faad22b2LinuxCVE List
- 448ba0ae65ca61064183564d2983c9aa59bd6ba7LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
smb/client: invalidate fscache for fallocate range operations
smb3_zero_range(), smb3_punch_hole(), smb3_insert_range(), and smb3_collapse_range() modify file contents through server-side range operations. These operations discard the affected page cache, but leave the FS-Cache cookie valid, so a later read may return data cached before the range operation.
Fix this by invalidating FS-Cache after outstanding I/O has completed and before modifying the file on the server.
Run the following as root on a CIFS mount with fsc enabled and an active CacheFiles backend:
bash -c ' MNT=/mnt/cifs FILE="$MNT/repro"
Generate four 1 MiB random blocks: [A][B][C][D].
dd if=/dev/urandom of=/tmp/src bs=1M count=4 status=none
Expected contents after zeroing B: [A][zero][C][D].
cp /tmp/src /tmp/expected dd if=/dev/zero of=/tmp/expected bs=1M seek=1 count=1 \ conv=notrunc status=none cp /tmp/src "$FILE"
Populate FS-Cache, then discard the page cache.
sync echo 1 > /proc/sys/vm/drop_caches cat "$FILE" > /dev/null sync echo 1 > /proc/sys/vm/drop_caches
fallocate --zero-range -o 1M -l 1M "$FILE"
if cmp -s /tmp/expected "$FILE"; then echo "readback: OK" else echo "readback: STALE DATA" fi '
Before this change, the readback differs from /tmp/expected:
readback: STALE DATA
After this change, it matches:
readback: OK
Text from CVE List
Affected versions 10
- Linuxaffected: 31742c5a331766bc7df6b0d525df00c6cd20d5a6 before cc7202a51b8777a757bda9dcfbf339f828c6a130CVE List
- Linuxaffected: 31742c5a331766bc7df6b0d525df00c6cd20d5a6 before dd8b1e808f5c19479e6ed47e2f88a1fd46f8b0e5CVE List
- Linuxaffected: 31742c5a331766bc7df6b0d525df00c6cd20d5a6 before 93c6e5a8d7c5071d586c1411596d5db5faad22b2CVE List
- Linuxaffected: 31742c5a331766bc7df6b0d525df00c6cd20d5a6 before 448ba0ae65ca61064183564d2983c9aa59bd6ba7CVE List
- Linuxaffected: 3.17CVE List
- Linuxunaffected: all versions before 3.17CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.114 through 6.12.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 4
- git.kernel.org/stable/c/cc7202a51b8777a757bda9dcfbf339f828c6a130Referencevia CVE List
- git.kernel.org/stable/c/dd8b1e808f5c19479e6ed47e2f88a1fd46f8b0e5Referencevia CVE List
- git.kernel.org/stable/c/93c6e5a8d7c5071d586c1411596d5db5faad22b2Referencevia CVE List
- git.kernel.org/stable/c/448ba0ae65ca61064183564d2983c9aa59bd6ba7Referencevia CVE List