CVE-2026-46194
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
28/05/2026
Last modified:
28/05/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
f2fs: fix node_cnt race between extent node destroy and writeback<br />
<br />
f2fs_destroy_extent_node() does not set FI_NO_EXTENT before clearing<br />
extent nodes. When called from f2fs_drop_inode() with I_SYNC set,<br />
concurrent kworker writeback can insert new extent nodes into the same<br />
extent tree, racing with the destroy and triggering f2fs_bug_on() in<br />
__destroy_extent_node(). The scenario is as follows:<br />
<br />
drop inode writeback<br />
- iput<br />
- f2fs_drop_inode // I_SYNC set<br />
- f2fs_destroy_extent_node<br />
- __destroy_extent_node<br />
- while (node_cnt) {<br />
write_lock(&et->lock)<br />
__free_extent_tree<br />
write_unlock(&et->lock)<br />
- __writeback_single_inode<br />
- f2fs_outplace_write_data<br />
- f2fs_update_read_extent_cache<br />
- __update_extent_tree_range<br />
// FI_NO_EXTENT not set,<br />
// insert new extent node<br />
} // node_cnt == 0, exit while<br />
- f2fs_bug_on(node_cnt) // node_cnt > 0<br />
<br />
Additionally, __update_extent_tree_range() only checks FI_NO_EXTENT for<br />
EX_READ type, leaving EX_BLOCK_AGE updates completely unprotected.<br />
<br />
This patch set FI_NO_EXTENT under et->lock in __destroy_extent_node(),<br />
consistent with other callers (__update_extent_tree_range and<br />
__drop_extent_tree) and check FI_NO_EXTENT for both EX_READ and<br />
EX_BLOCK_AGE tree.
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/0559a0e962aacbb47519e26ee663be04b72dcb92
- https://git.kernel.org/stable/c/42dd1c91f993431d0b399502479d00e6ad1bca71
- https://git.kernel.org/stable/c/ab1eaf9d5c99042f5b0243bf67a06283a4c0757f
- https://git.kernel.org/stable/c/b0e4395870eb3441ddc959f6710b5f6ca61aff26
- https://git.kernel.org/stable/c/ed78aeebef05212ef7dca93bd931e4eff67c113f



