CVE-2026-68384 in Linux
Tóm tắt
Bởi VulDB • 10/08/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
drm/xe/vf: Sửa lỗi race condition trong quá trình attach/detach VF CCS với các thao tác di chuyển BO đang thực thi (in-flight)
Hàm `xe_bo_move()` sẽ attach các bộ đệm hàng loạt đọc/ghi (BBs) của VF CCS vào một BO sau khi nó chuyển đổi từ trạng thái NULL/SYSTEM sang TT, và detach chúng sau khi chuyển đổi từ TT về SYSTEM. Cả hai thao tác này đều được thực hiện đồng bộ trên CPU ngay sau khi xây dựng fence copy/clear cho việc di chuyển, mà không chờ đợi fence đó báo hiệu (signal). Điều này tạo ra hai lỗi race condition với quá trình di chuyển VF:
- Việc attach xảy ra quá muộn so với job copy mà nó dự định bảo vệ. Nếu job copy được gửi đi trước khi các BBs CCS được attach, một sự kiện di chuyển VF làm tạm dừng thực thi giữa chừng trong lúc copy có thể quan sát thấy metadata CCS bị sao chép không đầy đủ nhưng thiếu trạng thái attach cần thiết để lưu/khôi phục chính xác nó.
- Việc detach xảy ra quá sớm so với job copy đang di chuyển dữ liệu ra khỏi TT. Các BBs CCS bị hủy ngay sau khi fence copy được lấy, trong khi thao tác blit thực tế vẫn có thể đang chạy (in-flight). Một sự kiện di chuyển VF làm tạm dừng thực thi giữa chừng trong lúc copy sau đó sẽ gây race condition với đường dẫn lưu/khôi phục đối với thao tác blit vẫn đang chạy, và các BBs CCS cần thiết để hiểu trạng thái bị tạm dừng đã bị xóa bỏ.
Khắc phục cả hai lỗi race:
- Di chuyển lệnh gọi attach lên trước khi job copy/clear được gửi đi, để các BBs CCS đã được đăng ký kịp thời điểm copy bắt đầu thực thi. Khi việc attach thất bại, hãy hoàn nguyên (unwind) và thoát khỏi thao tác di chuyển. Hàm `xe_migrate_ccs_rw_copy()` hiện nhận rõ tài nguyên đích, vì `bo->ttm.resource` không được cập nhật sang tài nguyên mới cho đến sau khi commit quá trình di chuyển xong.
- Chỉ detach sau khi chờ đợi tường minh fence copy báo hiệu (signal), thay vì hủy các BBs CCS ngay lập tức sau khi lấy nó.
Nhân tiện, cũng sửa hàm `xe_sriov_vf_ccs_attach_bo()` để hoàn nguyên và truyền lỗi đúng cách: vòng lặp trên mỗi ngữ cảnh trước đây không bao giờ thoát ra khi có lỗi, dẫn đến việc bỏ qua thầm lặng các thất bại trước đó. Hoàn nguyên bằng cách xóa trực tiếp từng ngữ cảnh đã attach thông qua `xe_migrate_ccs_rw_copy_clear()` thay vì tái sử dụng `xe_sriov_vf_ccs_detach_bo()`, hàm này yêu cầu cả hai ngữ cảnh đều phải được attach trước khi nó có thể dọn dẹp bất kỳ cái nào.
(cherry picked from commit d45ad0aa7a1eb5d7288b5ed948b05695611dc39e)
If you want to get best quality of vulnerability data, you may have to visit VulDB.