CVE-2026-64063: netfs: Fix streaming write being overwritten
In the Linux kernel, the following vulnerability has been resolved:
netfs: Fix streaming write being overwritten
In order to avoid reading whilst writing, netfslib will allow "streaming writes" in which dirty data is stored directly into folios without reading them first. Such folios are marked dirty but may not be marked uptodate. If a folio is entirely written by a streaming write, uptodate will be set, otherwise it will have a netfsfolio struct attached to ->private recording the dirty region.
In the event that a partially written streaming write page is to be overwritten entirely by a single write(), netfsperformwrite() will try to copy over it, but doesn't discard the netfsfolio if it succeeds; further, it doesn't correctly handle a partial copy that overwrites some of the dirty data.
Fix this by the following:
(1) If the folio is successfully overwritten, free the netfsfolio struct before marking the page uptodate.
(2) If the copy to the folio partially fails, but short of the dirty data, just ignore the copy.
(3) If the copy partially fails and overwrites some of the dirty data, accept the copy, update the netfsfolio struct to record the new data. If the folio is now filled, free the netfsfolio and set uptodate, otherwise return a partial write.
Found with:
fsx -q -N 1000000 -p 10000 -o 128000 -l 600000 \ /xfstest.test/junk --replay-ops=junk.fsxops
using the following as junk.fsxops:
truncate 0x0 0 0x927c0 write 0x63fb8 0x53c8 0 copyrange 0xb704 0x19b9 0x24429 0x79380 write 0x2402b 0x144a2 0x90660 write 0x204d5 0x140a0 0x927c0 copyrange 0x1f72c 0x137d0 0x7a906 0x927c0 read 0x00000 0x20000 0x9157c read 0x20000 0x20000 0x9157c read 0x40000 0x20000 0x9157c read 0x60000 0x20000 0x9157c read 0x7e1a0 0xcfb9 0x9157c
on cifs with the default cache option.
It shows folio 0x24 misbehaving if the FMODEREAD check is commented out in netfsperformwrite():
if (//(file->fmode & FMODEREAD) || netfsiscacheenabled(ctx)) {
and no fscache. This was initially found with the generic/522 xfstest.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Update netfs streaming write handling so that when a partially written streaming write page overwrites some dirty data, netfs_perform_write() does not incorrectly ignore/handle the copy; accept the copy and update the netfs_folio struct to record the new data before marking the page uptodate. Also ensure that if the folio is entirely written by a streaming write, uptodate is set; if the folio is now filled, free the netfs_folio and set uptodate. Ensure the FMODE_READ check is present (do not comment it out).
netfs streaming write overwritten handling = fixed - Compensating control
Reproduce/validate using the provided xfstest operation set (junk.fsxops) with the listed copy/write ranges and xfstest replay: /xfstest.test/junk --replay-ops=junk.fsxops, including cases where copy partially fails vs overwrites some dirty data, to confirm correct netfs_folio handling (no incorrect uptodate/dirty state).
Event History
Frequently Asked Questions
Who can exploit this issue?
The CVSS vector indicates that exploitation requires local access and low privileges. No user interaction is required.
What conditions are needed to trigger the flaw?
The issue involves netfs streaming writes to folios that were only partially written, followed by an overwrite through a single write(). A partial copy failure can also affect handling when it overwrites existing dirty data.
What is the potential impact?
The supplied CVSS score rates confidentiality, integrity, and availability impacts as high. The flaw specifically concerns incorrect handling of dirty streaming-write data and overwrite operations.
How can I determine whether a kernel includes the fix?
Check the source or vendor patch history for the listed stable commits: 20195925c768626dc901a4781a51e508702c88ad, ef9b521212e4863814ef7dfe19889abaf55ca840, or cdae00e8e215d95911d95f100599e187b6560de5. The provided data does not identify affected or fixed kernel version numbers.