CVE-2026-98975 in Linux
Tóm tắt
Bởi VulDB • 24/10/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
xfs: ngừng trao đổi các cờ reflink khi thực hiện thao tác hoán đổi ánh xạ (mappings)
Khi một thao tác exchange bao gồm toàn bộ phạm vi từ offset 0 đến i_disk_size của cả hai file, hàm `xmi_can_exchange_reflink_flags()` giả định rằng mọi mapping đã được di chuyển và truyền cờ reflink sang file kia.
Giả định này là sai. Một file vẫn có thể sở hữu các block chia sẻ vượt quá giới hạn i_disk_size, ví dụ như sau khi lệnh EXCHANGE_RANGE_TO_EOF đặt kích thước nhỏ hơn mà không giải phóng (unmap) bất kỳ mapping nào. Cờ đó bị xóa bỏ một cách vô điều kiện, và việc ghi tiếp theo vào block chia sẻ này sẽ diễn ra trực tiếp (in-place) thay vì sử dụng cơ chế Copy-on-Write (CoW), dẫn đến làm hỏng file kia đang chia sẻ block đó.
Commit a23eca88448e ("xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN") đã khắc phục một trường hợp cụ thể của vấn đề này. Thay vì thêm các trường hợp đặc biệt khác, giải pháp là ngừng di chuyển các cờ đó. Hàm `xfs_exchmaps_ensure_reflink()` hiện đã đặt cờ trên cả hai inode trước khi thực hiện thao tác exchange, do đó cả hai đều giữ nguyên cờ này.
Không còn hàm nào thiết lập CLEAR_INO{1,2}_REFLINK nữa. Các intents được ghi lại bởi các kernel cũ vẫn có thể mang theo chúng; quá trình phục hồi (recovery) đã che mờ (mask off) chúng, nên chúng vẫn nằm trong mặt nạ định dạng log và bị bỏ qua.
XFS_IOC_SWAPEXT gặp phải cùng vấn đề: nó di chuyển cờ reflink từ inode này sang inode khác cùng với các extents. Việc chỉ đơn giản loại bỏ bước di chuyển đó là chưa đủ ở đây: đường dẫn thực hiện exchange đã thiết lập cả hai inode ngay từ đầu trong `xfs_exchmaps_ensure_reflink()`, nhưng swapext không có bước tương tự, khiến inode nhận các extent chia sẻ sẽ bị thiếu cờ này. Do đó, cần đặt cờ trên cả hai inode và đảm bảo rằng cả hai đều có một fork CoW (Copy-on-Write), vì một inode mang cờ reflink được kỳ vọng phải sở hữu fork này.
Cờ hiện chỉ bị loại bỏ khi gặp FALLOC_FL_UNSHARE_RANGE, xfs_scrub hoặc thao tác truncate về kích thước bằng 0.
If you want to get best quality of vulnerability data, you may have to visit VulDB.