{"id":28519,"date":"2026-09-25T00:31:35","date_gmt":"2026-09-24T16:31:35","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93255"},"modified":"2026-09-25T00:31:35","modified_gmt":"2026-09-24T16:31:35","slug":"cve-2026-93255","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93255","title":{"rendered":"CVE-2026-93255 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: make sure EXTE"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>btrfs: make sure EXTENT_BUFFER_READING is cleared under refs_lock<\/p>\n<p>[FALSE ALERTS]<br \/>\nThere is a bug report that the warning inside<br \/>\ninvalidate_and_check_btree_folios() got triggered during btrfs\/298:<\/p>\n<p> BTRFS info (device sdd): first mount of filesystem f9bf732a-a19b-44b9-99a7-614ddff168e2<br \/>\n BTRFS info (device sdd): using crc32c checksum algorithm<br \/>\n BTRFS error (device sdd): failed to find fsid cb2fdb42-b638-4f2f-badd-4127467ba674 when attempting to open seed devices<br \/>\n BTRFS error (device sdd): failed to read chunk tree: -2<br \/>\n &#8212;&#8212;&#8212;&#8212;[ cut here ]&#8212;&#8212;&#8212;&#8212;<br \/>\n WARNING: disk-io.c:3342 at invalidate_and_check_btree_folios+0x260\/0x3c0 [btrfs], CPU#4: mount\/125993<br \/>\n CPU: 4 UID: 0 PID: 125993 Comm: mount Tainted: G        W  OE       7.1.0-rc7-custom+ #1 PREEMPT(full)<br \/>\n Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20250812-19.fc42 08\/12\/2025<br \/>\n Call trace:<br \/>\n  invalidate_and_check_btree_folios+0x260\/0x3c0 [btrfs] (P)<br \/>\n  open_ctree+0x1f50\/0x23b0 [btrfs]<br \/>\n  btrfs_get_tree+0x89c\/0xc48 [btrfs]<br \/>\n  vfs_get_tree+0x30\/0x110<br \/>\n  vfs_cmd_create+0x58\/0xe8<br \/>\n  __arm64_sys_fsconfig+0x39c\/0x518<br \/>\n  invoke_syscall.constprop.0+0x48\/0x120<br \/>\n  el0_svc_common.constprop.0+0x40\/0xe8<br \/>\n  do_el0_svc+0x24\/0x38<br \/>\n  el0_svc+0x50\/0x310<br \/>\n  el0t_64_sync_handler+0xa0\/0xe8<br \/>\n  el0t_64_sync+0x198\/0x1a0<br \/>\n &#8212;[ end trace 0000000000000000 ]&#8212;<br \/>\n BTRFS warning (device sdd): unable to release extent buffer 365985792 owner 3 gen 17 refs 3 flags 0x5<\/p>\n<p>[CAUSE]<br \/>\nIn that invalidate_and_check_btree_folios() we wait for the eb to finish<br \/>\nits read, then check if it&#8217;s only held by us and the btree inode.<\/p>\n<p>If not, then do a warning as it may be still held, and could cause<br \/>\nproblems.<\/p>\n<p>But there is a small window where the check can lead to false alerts:<\/p>\n<p>    Thread A (Read endio)         |        Thread B (Unmount)<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n end_bbio_meta_read()             |<br \/>\n | The eb has one extra ref held  |<br \/>\n | by the reader, and has         |<br \/>\n | EXTENT_BUFFER_READING flag set | invalidate_and_check_btree_folios()<br \/>\n |                                | |<br \/>\n |- clear_extent_buffer_reading() | |<br \/>\n |                                | |- wait_on_bit_io();<br \/>\n |                                | |  The EXTENT_BUFFER_READING flag is<br \/>\n |                                | |  cleared<br \/>\n |                                | |- if (refcount_read(eb-&gt;refs) &gt; 2)<br \/>\n |                                |    The eb is held by the read, us<br \/>\n |                                |    and btree inode, thus it<br \/>\n |                                |    will trigger the warning<br \/>\n |- free_extent_buffer()          |<\/p>\n<p>[FIX]<br \/>\nIntroduce a helper, free_extent_buffer_clear_reading().<\/p>\n<p>If the new parameter, @clear_reading, is set, we will hold the spinlock<br \/>\nat the beginning of free_extent_buffer_clear_reading() to make sure the<br \/>\nEXTENT_BUFFER_READING flag is cleared inside the same critical section<br \/>\nof decreasing refs.<\/p>\n<p>Now free_extent_buffer() will just call<br \/>\nfree_extent_buffer_clear_reading() with @clear_reading set to false, so<br \/>\nno behavior change.<\/p>\n<p>But for end_bbio_meta_read(), it will not clear_extent_buffer_reading()<br \/>\ndirectly, but pass @clear_reading as true.<\/p>\n<p>Then inside invalidate_and_check_btree_folios(), hold the refs_lock<br \/>\nbefore reading refs.<br \/>\nSo that we eliminate the race window completely.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>btrfs: make sure EXTENT_BUFFER_READING is cleared under refs_lock<\/p>\n<p>[FALSE ALERTS]<br \/>\nThere is a bug report that the warning inside<br \/>\ninv<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-28519","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/28519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=28519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=28519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=28519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}