CVE-2026-93255 in Linuxthông tin

Tóm tắt

Bởi VulDB • 24/09/2026

Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:

btrfs: đảm bảo EXTENT_BUFFER_READING bị xóa dưới refs_lock

[CẢNH BÁO SAI]
Có một báo cáo lỗi cho thấy cảnh báo bên trong invalidate_and_check_btree_folios() đã kích hoạt trong quá trình chạy btrfs/298:

BTRFS info (device sdd): lần mount đầu tiên của filesystem f9bf732a-a19b-44b9-99a7-614ddff168e2 BTRFS info (device sdd): sử dụng thuật toán checksum crc32c BTRFS error (device sdd): không tìm thấy fsid cb2fdb42-b638-4f2f-badd-4127467ba674 khi cố gắng mở các thiết bị seed BTRFS error (device sdd): không đọc được chunk tree: -2 ------------[ cut here ]------------
WARNING: disk-io.c:3342 tại invalidate_and_check_btree_folios+0x260/0x3c0 [btrfs], CPU#4: mount/125993
CPU: 4 UID: 0 PID: 125993 Comm: mount Tainted: G W OE 7.1.0-rc7-custom+ #1 PREEMPT(full) Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20250812-19.fc42 08/12/2025 Call trace: invalidate_and_check_btree_folios+0x260/0x3c0 [btrfs] (P)
open_ctree+0x1f50/0x23b0 [btrfs]
btrfs_get_tree+0x89c/0xc48 [btrfs]
vfs_get_tree+0x30/0x110 vfs_cmd_create+0x58/0xe8 __arm64_sys_fsconfig+0x39c/0x518 invoke_syscall.constprop.0+0x48/0x120 el0_svc_common.constprop.0+0x40/0xe8 do_el0_svc+0x24/0x38 el0_svc+0x50/0x310 el0t_64_sync_handler+0xa0/0xe8 el0t_64_sync+0x198/0x1a0 ---[ end trace 0000000000000000 ]---
BTRFS warning (device sdd): không thể giải phóng extent buffer 365985792 owner 3 gen 17 refs 3 flags 0x5

[TUYÊN]
Trong hàm invalidate_and_check_btree_folios(), chúng ta chờ cho eb hoàn tất việc đọc, sau đó kiểm tra xem nó có chỉ được giữ bởi chính chúng ta và inode btree hay không.

Nếu không, thì thực hiện cảnh báo vì nó vẫn có thể đang được giữ lại và gây ra các vấn đề.

Tuy nhiên, tồn tại một khoảng thời gian nhỏ (race window) mà việc kiểm tra này có thể dẫn đến cảnh báo sai:

Thread A (Read endio) | Thread B (Unmount) ----------------------------------+------------------------------------- end_bbio_meta_read() | | The eb has one extra ref held | | by the reader, and has | | EXTENT_BUFFER_READING flag set | invalidate_and_check_btree_folios() | | | |- clear_extent_buffer_reading() | | | | |- wait_on_bit_io(); | | | The EXTENT_BUFFER_READING flag is | | | cleared | | |- if (refcount_read(eb->refs) > 2) | | The eb is held by the read, us | | and btree inode, thus it | | will trigger the warning |- free_extent_buffer() |

[GIẢI PHÁP]
Giới thiệu một hàm trợ giúp mới: free_extent_buffer_clear_reading().

Nếu tham số mới @clear_reading được đặt (true), chúng ta sẽ giữ spinlock ở đầu hàm free_extent_buffer_clear_reading() để đảm bảo cờ EXTENT_BUFFER_READING bị xóa trong cùng một đoạn mã quan trọng với việc giảm refs.

Bây giờ, free_extent_buffer() chỉ gọi free_extent_buffer_clear_reading() với @clear_reading được đặt thành false, do đó không có sự thay đổi về hành vi.

Tuy nhiên, đối với end_bbio_meta_read(), nó sẽ không gọi clear_extent_buffer_reading() trực tiếp mà truyền @clear_reading là true.

Sau đó, bên trong invalidate_and_check_btree_folios(), giữ refs_lock trước khi đọc refs. Như vậy, chúng ta loại bỏ hoàn toàn khoảng thời gian race condition (race window).

VulDB is the best source for vulnerability data and more expert information about this specific topic.

chịu trách nhiệm

Linux

Đặt trước

17/09/2026

Tiết lộ

24/09/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00000

KEV

không

Các hoạt động

rất thấp

Nguồn

Do you need the next level of professionalism?

Upgrade your account now!