CVE-2026-89566: jbd2: check need_resched() when skipping busy checkpoint buffers

Published Sep 11, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

jbd2: check needresched() when skipping busy checkpoint buffers

journalshrinkonecplist() skips busy checkpoint buffers when called with JBD2SHRINKBUSYSKIP. The continue statement on this path also skips the needresched() 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->jlistlock, 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 jlistlock, resulting in soft lockups or RCU stalls.

Route the busy-buffer path through the needresched() check so that the shrinker can release jlistlock and reschedule promptly, restoring parity with the clean-buffer path, which already checks needresched(). This does not change which checkpoint buffers are eligible for removal.

Affected Software

1 affected component
Linux Kernel

Event History

Sep 11, 2026
CVE Published
via MITRE·07:44 PM
Data Sourced
via MITRE·07:44 PM
Description

Frequently Asked Questions

1

What systems are most likely to experience this issue?

Linux systems that can build large journal checkpoint lists and encounter memory pressure are the relevant exposure case. The problematic behavior is most pronounced when those lists contain mostly busy checkpoint buffers.

2

What conditions are needed to trigger the impact?

The journal shrinker must run with JBD2_SHRINK_BUSY_SKIP while processing a checkpoint list dominated by busy buffers, and a reschedule request must occur during the walk. Under those conditions, it can retain journal->j_list_lock for an extended period.

3

What is the operational impact if it is triggered?

Other CPUs can spin waiting for j_list_lock while the shrinker traverses the list. This can result in soft lockups or RCU stalls rather than changing which checkpoint buffers may be removed.

4

What changes in the resolved implementation?

Busy checkpoint buffers now pass through the need_resched() check instead of bypassing it with a continue statement. This allows the shrinker to release journal->j_list_lock and reschedule promptly.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203