Description
In the Linux kernel, the following vulnerability has been resolved: NFS: Charge unstable writes by request size, not folio size nfs_folio_mark_unstable() and nfs_folio_clear_commit() charge and uncharge NR_WRITEBACK/WB_WRITEBACK by folio_nr_pages(folio) once per *request* added to or removed from a commit list. This is correct only when a folio has a single associated request. When pg_test splits a folio into N sub-folio requests (e.g. pNFS flexfiles striping with a stripe unit smaller than the folio size, or plain wsize-limited splitting), each of the N requests independently charges the whole folio's page count, inflating the accounting by a factor of N per folio. With large folios and small stripe units this reaches multiple orders of magnitude: a 2 MiB folio split into 512 4 KiB requests can charge up to 512x its real size, pushing global dirty+writeback accounting past the system's dirty threshold and forcing every buffered writer on the host into the hard-throttle path, including unrelated in-kernel NFS server threads sharing the box. Charge each request only for the pages it actually covers.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
0c493b5cf16e28d761b6e77c7c32aa0e7af70813 to < a442c258320b689f13d2205eaeeddf8b0e630288affected0c493b5cf16e28d761b6e77c7c32aa0e7af70813 to < 1f646e23372f3444dc5f0bcb5404a49d26756addaffected0c493b5cf16e28d761b6e77c7c32aa0e7af70813 to < 0ffc032294a29601b1019dba91aa1a930d90df17affected0c493b5cf16e28d761b6e77c7c32aa0e7af70813 to < a192b6c149c6ea10cc88869accb78165eb454456affected0c493b5cf16e28d761b6e77c7c32aa0e7af70813 to < 27934d02cbeb8a957dd11c985a579e58d30c5270affected
Linux Linux
Default version status: affected
6.3affected0 to < 6.3unaffected6.6.148 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/a442c258320b689f13d2205eaeeddf8b0e630288 ↗
- https://git.kernel.org/stable/c/1f646e23372f3444dc5f0bcb5404a49d26756add ↗
- https://git.kernel.org/stable/c/0ffc032294a29601b1019dba91aa1a930d90df17 ↗
- https://git.kernel.org/stable/c/a192b6c149c6ea10cc88869accb78165eb454456 ↗
- https://git.kernel.org/stable/c/27934d02cbeb8a957dd11c985a579e58d30c5270 ↗