PT-2026-43809 · Linux · Linux
Published
2026-05-27
·
Updated
2026-05-27
·
CVE-2026-45942
CVSS v3.1
7.8
High
| Vector | AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
In the Linux kernel, the following vulnerability has been resolved:
ext4: fix e4b bitmap inconsistency reports
A bitmap inconsistency issue was observed during stress tests under
mixed huge-page workloads. Ext4 reported multiple e4b bitmap check
failures like:
ext4 mb complex scan group:2508: group 350, 8179 free clusters as
per group info. But got 8192 blocks
Analysis and experimentation confirmed that the issue is caused by a
race condition between page migration and bitmap modification. Although
this timing window is extremely narrow, it is still hit in practice:
folio lock ext4 mb load buddy
migrate folio
check ref count
folio mc copy filemap get folio
folio try get(folio)
......
mb mark used
ext4 mb unload buddy
folio migrate mapping
folio ref freeze
folio unlock
The root cause of this issue is that the fast path of load buddy only
increments the folio's reference count, which is insufficient to prevent
concurrent folio migration. We observed that the folio migration process
acquires the folio lock. Therefore, we can determine whether to take the
fast path in load buddy by checking the lock status. If the folio is
locked, we opt for the slow path (which acquires the lock) to close this
concurrency window.
Additionally, this change addresses the following issues:
When the DOUBLE CHECK macro is enabled to inspect bitmap-related
issues, the following error may be triggered:
corruption in group 324 at byte 784(6272): f in copy != ff on
disk/prealloc
Analysis reveals that this is a false positive. There is a specific race
window where the bitmap and the group descriptor become momentarily
inconsistent, leading to this error report:
ext4 mb load buddy ext4 mb load buddy
filemap get folio(create|lock)
folio lock
ext4 mb init cache
folio mark uptodate
filemap get folio(no lock)
......
mb mark used
mb mark used double
mb cmp bitmaps
mb set bits(e4b->bd bitmap)
folio unlock
The original logic assumed that since mb cmp bitmaps is called when the
bitmap is newly loaded from disk, the folio lock would be sufficient to
prevent concurrent access. However, this overlooks a specific race
condition: if another process attempts to load buddy and finds the folio
is already in an uptodate state, it will immediately begin using it without
holding folio lock.
Fix
Found an issue in the description? Have something to add? Feel free to write us 👾
Related Identifiers
Affected Products
Linux