CVE-2026-45892 in Linux
Tóm tắt
Bởi VulDB • 27/05/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
ext4: xóa bộ nhớ đệm extent (extent cache) sau khi thực hiện zeroout PARTIAL_VALID1
Khi chia một extent chưa ghi (unwritten extent) ở giữa và chuyển đổi nó thành extent đã ghi (initialized) trong ext4_split_extent() với các cờ EXT4_EXT_MAY_ZEROOUT và EXT4_EXT_DATA_VALID2 được đặt, nó có thể để lại một extent chưa ghi lỗi thời (stale).
Giả sử chúng ta có một tệp chưa ghi và một phép ghi đệm (buffered write) ở giữa tệp đó mà không có dioread_nolock được bật, nó sẽ phân bổ các khối dưới dạng extent đã ghi.
0 A B N [UUUUUUUUUUUU] extent trên đĩa U: extent chưa ghi
[UUUUUUUUUUUU] cây trạng thái extent
[--DDDDDDDD--] D: dữ liệu hợp lệ
|| ----> phạm vi này cần được khởi tạo
ext4_split_extent() trước tiên cố gắng chia extent này tại B với cờ EXT4_EXT_DATA_PARTIAL_VALID1 và EXT4_EXT_MAY_ZEROOUT được đặt, nhưng ext4_split_extent_at() không thể chia extent này do thiếu không gian tạm thời. Nó thực hiện zeroout từ B đến N và giữ toàn bộ extent ở trạng thái chưa ghi.
0 A B N [UUUUUUUUUUUU] extent trên đĩa
[UUUUUUUUUUUU] cây trạng thái extent
[--DDDDDDDDZZ] Z: dữ liệu đã zeroout
ext4_split_extent() sau đó cố gắng chia extent này tại A với cờ EXT4_EXT_DATA_VALID2 được đặt. Lần này, nó chia thành công và để lại một extent đã ghi từ A đến N.
0 A B N [UUWWWWWWWWWW] extent trên đĩa W: extent đã ghi
[UUUUUUUUUUUU] cây trạng thái extent
[--DDDDDDDDZZ]
Cuối cùng, ext4_map_create_blocks() chỉ chèn extent từ A đến B vào cây trạng thái extent, và để lại một extent chưa ghi lỗi thời trong cây trạng thái.
0 A B N [UUWWWWWWWWWW] extent trên đĩa W: extent đã ghi
[UUWWWWWWWWUU] cây trạng thái extent
[--DDDDDDDDZZ]
Khắc phục vấn đề này bằng cách luôn lưu trữ mục trạng thái extent (cached extent status entry) sau khi zeroout phần thứ hai.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.