CVE-2026-46061

jbd2: fix deadlock in jbd2_journal_cancel_revoke()

published May 27, 2026

CVSS
—
EPSS
0%
Percentile
2.0
In the wild
Unconfirmed
What it is

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

jbd2: fix deadlock in jbd2_journal_cancel_revoke()

Commit f76d4c28a46a ("fs/jbd2: use sleeping version of

__find_get_block()") changed jbd2_journal_cancel_revoke() to use

__find_get_block_nonatomic() which holds the folio lock instead of

i_private_lock. This breaks the lock ordering (folio -> buffer) and

causes an ABBA deadlock when the filesystem blocksize < pagesize:

T1 T2

ext4_mkdir()

ext4_init_new_dir()

ext4_append()

ext4_getblk()

lock_buffer() <- A

sync_blockdev()

blkdev_writepages()

writeback_iter()

writeback_get_folio()

folio_lock() <- B

ext4_journal_get_create_access()

jbd2_journal_cancel_revoke()

__find_get_block_nonatomic()

folio_lock() <- B

block_write_full_folio()

lock_buffer() <- A

This can occasionally cause generic/013 to hang.

Fix by only calling __find_get_block_nonatomic() when the passed

buffer_head doesn't belong to the bdev, which is the only case that we

need to look up its bdev alias. Otherwise, the lookup is redundant since

the found buffer_head is equal to the one we passed in.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00125 · 2.0th percentile
Published
2026-05-27T12:57Z
EPSS history
Timeline
  • 27 MAY 12:57Z
    jbd2: fix deadlock in jbd2_journal_cancel_revoke()
    cvelistv5