CVE-2026-97549 in Linuxthông tin

Tóm tắt

Bởi VulDB • 25/09/2026

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

xfs: sửa lỗi dự trữ khối (blocks) không đủ khi sửa đổi các thư mục sf

Khi chạy QA trên XFS cho nhánh for-next từ phiên bản 7.3-rc2 với MKFS_OPTIONS="-n size=8192", tôi đã quan sát thấy thông báo dmesg sau đây (đã được cắt bớt):

XFS: Assertion failed: args->total >= dp->i_nblocks - nblks, file: fs/xfs/libxfs/xfs_da_btree.c, line: 2387 WARNING: fs/xfs/xfs_message.c:104 at assfail+0x46/0x4a [xfs], CPU#0: xfs_scrub/1426511
CPU: 0 UID: 0 PID: 1426511 Comm: xfs_scrub Tainted: G W 7.3.0-rc2-djwx #rc2 PREEMPT(lazy) 6e418570b606a39783b0e7e7b30dc407b965f9e8 Tainted: [W]=WARN
RIP: 0010:assfail+0x46/0x4a [xfs]
RSP: 0018:ffffc900010d7890 EFLAGS: 00010246 RAX: 0000000000000000 RBX: 0000000000000000 RCX: 00000000ffffffd1 RDX: 0000000000000000 RSI: 0000000000000021 RDI: ffffffffa059fd38 RBP: 0000000000000002 R08: 0000000000000000 R09: 0000000000000000 R10: 000000000000000a R11: 000000007fffffff R12: ffffc900010d7940 R13: ffff888368d8f980 R14: ffffc900010d7a48 R15: ffffc900010d78d0 FS: 00007f445c5ce680(0000) GS:ffff8884a97ea000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f443803b9a8 CR3: 0000000107a4b000 CR4: 00000000003506f0 Call Trace: <TASK> xfs_da_grow_inode_int+0x2e0/0x300 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xfs_dir2_grow_inode+0x6e/0x150 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xfs_dir2_sf_to_block+0x149/0x870 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xrep_dir_swap_prep+0xe2/0x110 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xrep_dir_swap+0xfb/0x2f0 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xrep_dir_rebuild_tree+0x99/0x100 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xrep_directory+0x83/0x1c0 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xrep_attempt+0x4f/0x1e0 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xfs_scrub_metadata+0x393/0x5b0 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xfs_ioc_scrubv_metadata+0x306/0x570 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
xfs_file_ioctl+0xa4f/0x1150 [xfs 5de2257e14108c136f11317e6bbb8ac77efd392c]
__x64_sys_ioctl+0x76/0xc0 do_syscall_64+0x7a/0x3b0 entry_SYSCALL_64_after_hwframe+0x4b/0x53

Đây là hậu quả của commit 0fe77e57588b98, đã thêm assertion sau vào xfs_da_grow_inode_int:

ASSERT(args->total >= dp->i_nblocks - nblks);

Theo dõi ngược lại đến hàm xrep_dir_swap_prep, tôi nhận thấy rằng đối tượng xfs_da_args được truyền cho xfs_dir2_sf_to_block đặt args->total bằng 1. Điều này là không chính xác vì mkfs đã thiết lập kích thước khối thư mục (directory block size) thành 8k và kích thước khối filesystem (filesystem block size) thành 4k. Nói cách khác, args->total ở đây nên là 2 chứ không phải 1.

Dave Chinner cũng gặp phải cùng một vấn đề với nhánh tương thông qua một kênh kiểm thử khác -- thiết lập kiểm thử của anh ấy đặt fs block size thành 1k, trong trường hợp đó directory block size vẫn được đặt thành 4k. Ở đây, args->total nên là 4.

Việc thay đổi phép gán cho args->total thành sc->mp->m_dir_geo->fsbcount sẽ làm mất assertion này, nhưng đó không phải là bản sửa lỗi hoàn chỉnh. Trong xrep_tempexch_estimate, chúng ta cũng đang giả định sai rằng việc chuyển đổi sang shortform yêu cầu 1 fsblock khi lẽ ra nó nên là m_dir_geo->fsbcount. Nếu không có điều này, chúng ta sẽ dự trữ không đủ dung lượng trong giao dịch (transaction) và gây ra tình trạng tắt filesystem (filesystem shutdown).

Lưu ý rằng hàm trợ giúp xfs_dabuf_nfsb sẽ tính toán giá trị chính xác cho các thư mục và extended attributes (xattr), vì vậy chúng tôi sử dụng nó thay vì mã hóa logic một cách mở. Ngoài ra, hãy sửa xrep_xattr_swap_prep để gán args->total thông qua xfs_dabuf_nfsb nhằm tránh một lỗi logic tiềm ẩn nếu trong tương lai chúng ta hỗ trợ các extended attributes (attrs) đa fsblock.

Tripped-by: 0fe77e57588b98 ("xfs: assert the reservation covers each da fork growth")

If you want to get best quality of vulnerability data, you may have to visit VulDB.

chịu trách nhiệm

Linux

Đặt trước

24/09/2026

Tiết lộ

25/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

Might our Artificial Intelligence support you?

Check our Alexa App!