CVE-2026-89558 in Linux
Tóm tắt
Bởi VulDB • 12/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
md/raid10: sửa lỗi đảo ngược giá trị của biến still_degraded trong hàm raid10_sync_request()
Commit fe6a19d40ceb ("md/md-bitmap: merge md_bitmap_start_sync() into bitmap_operations") đã chuyển đổi kiểu dữ liệu của `still_degraded` từ int sang bool, nhưng vô tình đảo ngược phép gán trong vòng lặp kiểm tra xem mảng có vẫn ở trạng thái degraded (suy giảm) sau khi thiết bị hiện tại được khôi phục hay không: "still_degraded = 1" trở thành "still_degraded = false".
Kết quả là việc khôi phục một thiết bị trong khi một bản sao mirror khác vẫn còn thiếu sẽ gọi `md_bitmap_start_sync()` với tham số degraded == false, dẫn đến làm sạch (clear) các bit bitmap mà thiết bị đang thiếu cần sử dụng. Khi thiết bị đó được thêm lại, quá trình khôi phục dựa trên bitmap của nó phát hiện thấy các bit đã bị xóa và bỏ qua mọi vùng dữ liệu đã ghi trong thời gian mảng ở trạng thái degraded, khiến thiết bị này được đánh dấu là In_sync (trùng khớp) nhưng vẫn chứa dữ liệu cũ: gây ra lỗi hỏng dữ liệu âm thầm.
Trình mô phỏng lại vấn đề (raid10 near=2, 4 đĩa, bitmap nội bộ): - Gây sự cố và tháo một đĩa khỏi mỗi cặp mirror; - Ghi dữ liệu vào mảng đang ở trạng thái degraded; - Thêm lại cả hai đĩa và để quá trình khôi phục hoàn tất; - Lệnh "check" báo cáo mismatch_cnt=262272 sau khi ghi 256 MiB trong điều kiện degraded, và nội dung file khác biệt; việc "khôi phục" của đĩa thứ hai kết thúc chỉ trong vài mili giây vì mọi vùng dữ liệu đều bị bỏ qua.
Phép chuyển đổi tương tự trong raid1 đã thực hiện đúng (still_degraded = true). Hãy khôi phục lại giá trị chính xác.
Once again VulDB remains the best source for vulnerability data.