CVE-2026-23233 in Linuxthông tin

Tóm tắt

Bởi VulDB • 21/06/2026

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

f2fs: sửa lỗi để tránh ánh xạ sai khối vật lý cho file hoán đổi (swapfile)

Xiaolong Guo đã báo cáo một lỗi f2fs trên bugzilla [1]

[1] https://bugzilla.kernel.org/show_bug.cgi?id=220951

Trích dẫn:

"Khi sử dụng bài kiểm tra áp lực bộ nhớ hoán đổi (swap stress test) của stress-ng trên hệ thống tệp F2FS với kernel 6.6+, hệ thống gặp phải lỗi hỏng dữ liệu, dẫn đến một trong hai trường hợp sau: 1 Lỗi hỏng dm-verity và thiết bị khởi động lại 2 Lỗi hỏng nút f2fs (F2FS node) và treo khi khởi động

Vấn đề xảy ra cụ thể khi: 1 Sử dụng hệ thống tệp F2FS (ext4 không bị ảnh hưởng) 2 Kích thước file hoán đổi nhỏ hơn kích thước phân đoạn của F2FS (2MB) 3 File hoán đổi có bố cục vật lý phân mảnh (nhiều extent không liên tục) 4 Phiên bản kernel là 6.6+ (phiên bản 6.1 không bị ảnh hưởng)

Nguyên nhân gốc rễ nằm ở hàm check_swap_activate() trong fs/f2fs/data.c. Khi extent đầu tiên của một file hoán đổi nhỏ (< 2MB) không được căn chỉnh theo ranh giới phân đoạn, hàm này xử lý sai coi nó là extent cuối cùng, dẫn đến việc không ánh xạ các extent tiếp theo. Điều này gây ra việc tạo swap_extent không chính xác, nơi chỉ extent đầu tiên được ánh xạ, khiến các ghi hoán đổi sau đó ghi đè lên các vị trí vật lý sai (dữ liệu của tệp khác).

Các bước để tái hiện lỗi 1 Thiết bị có phân vùng userdata định dạng F2FS 2 Biên dịch stress-ng từ https://github.com/ColinIanKing/stress-ng 3 Chạy bài kiểm tra áp lực bộ nhớ hoán đổi: (thiết bị Android) adb shell "cd /data/stressng; ./stress-ng-64 --metrics-brief --timeout 60 --swap 0"

Nhật ký sự kiện (Log): 1 Ftrace cho thấy trong kernel 6.6, chỉ extent đầu tiên được ánh xạ trong lần gọi thứ hai của f2fs_map_blocks trong check_swap_activate(): stress-ng-swap-8990: f2fs_map_blocks: ino=11002, file offset=0, start blkaddr=0x43143, len=0x1 (Chỉ 4KB được ánh xạ, không phải toàn bộ file hoán đổi) 2 Trong kernel 6.1, cả hai extent đều được ánh xạ chính xác: stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=0, start blkaddr=0x13cd4, len=0x1 stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=1, start blkaddr=0x60c84b, len=0xff

Mã gây vấn đề nằm trong check_swap_activate(): if ((pblock - SM_I(sbi)->main_blkaddr) % blks_per_sec || nr_pblocks % blks_per_sec || !f2fs_valid_pinned_area(sbi, pblock)) {
bool last_extent = false;

not_aligned++;

nr_pblocks = roundup(nr_pblocks, blks_per_sec

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

13/01/2026

Tiết lộ

04/03/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00160

KEV

không

Các hoạt động

rất thấp

Nguồn

Interested in the pricing of exploits?

See the underground prices here!