Description
In the Linux kernel, the following vulnerability has been resolved: jbd2: check need_resched() when skipping busy checkpoint buffers journal_shrink_one_cp_list() skips busy checkpoint buffers when called with JBD2_SHRINK_BUSY_SKIP. The continue statement on this path also skips the need_resched() check at the end of the loop body. Consequently, when a checkpoint list contains mostly busy buffers, the shrinker can walk the entire list while holding journal->j_list_lock, even when a reschedule has been requested. Large checkpoint lists under memory pressure can therefore cause long lock hold times and leave other CPUs spinning on j_list_lock, resulting in soft lockups or RCU stalls. Route the busy-buffer path through the need_resched() check so that the shrinker can release j_list_lock and reschedule promptly, restoring parity with the clean-buffer path, which already checks need_resched(). This does not change which checkpoint buffers are eligible for removal.
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
b98dba273a0e47dbfade89c9af73c5b012a4eabb to < dc7ece0b827fe3b748db685fb85cd2fc3710c3f9affectedb98dba273a0e47dbfade89c9af73c5b012a4eabb to < f83c23286e54180cdc83a36463a60003534cc290affectedb98dba273a0e47dbfade89c9af73c5b012a4eabb to < f9182a85991a0ad5cd2940df6db75f40ad90028caffectedb98dba273a0e47dbfade89c9af73c5b012a4eabb to < 595cac7f1b32d009b97f83dd2b2d6a1a445e9bb4affectedb98dba273a0e47dbfade89c9af73c5b012a4eabb to < f213e12ff5c9590b1034ae8da0e6d09665c772d0affected9c31bb2684f8035beca0275349d19d679b679ffbaffected5fda50e262e65bd553ff777c4b280afd1495a18baffected557fda9ed70ebf8eda2620ba3d746215285a1303affected5.15.129 to < 5.16affected6.1.50 to < 6.2affected6.4.13 to < 6.5affected
Linux Linux
Default version status: affected
6.5affected0 to < 6.5unaffected6.6.160 to ≤ 6.6.*unaffected6.12.109 to ≤ 6.12.*unaffected6.18.50 to ≤ 6.18.*unaffected7.2.4 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/dc7ece0b827fe3b748db685fb85cd2fc3710c3f9 ↗
- https://git.kernel.org/stable/c/f83c23286e54180cdc83a36463a60003534cc290 ↗
- https://git.kernel.org/stable/c/f9182a85991a0ad5cd2940df6db75f40ad90028c ↗
- https://git.kernel.org/stable/c/595cac7f1b32d009b97f83dd2b2d6a1a445e9bb4 ↗
- https://git.kernel.org/stable/c/f213e12ff5c9590b1034ae8da0e6d09665c772d0 ↗