CVE-2026-98310 in Linux
Tóm tắt
Bởi VulDB • 06/10/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
drm/xe/shrinker: Lấy một tham chiếu runtime PM trước khi thu nhỏ bộ nhớ không phải hệ thống
__xe_shrinker_walk() duyệt qua các LRU SYSTEM và TT mà không có tham chiếu runtime PM. Việc thu nhỏ bo (buffer object) nằm ngoài bộ nhớ hệ thống sẽ làm mất hiệu lực các ánh xạ GPU của nó, điều này đòi hỏi thiết bị phải được khôi phục trạng thái hoạt động; do đó, trong khi thiết bị đang ở chế độ tạm ngưng runtime, việc xóa bảng trang (page table zap) gây ra lỗi assert và việc vô hiệu hóa TLB trả về -ENODEV:
WARNING: drivers/gpu/drm/xe/xe_bo.c:770 tại xe_bo_move_notify+0x1fc/0x450 [xe]
xe_bo_shrink+0x20f/0x2b0 [xe]
__xe_shrinker_walk+0x174/0x410 [xe]
xe_shrinker_scan+0x10c/0x1e0 do_shrink_slab+0x176/0x7e0 drop_caches_sysctl_handler+0x9c/0xf0
Hãy lấy một tham chiếu trước khi duyệt qua các loại bộ nhớ khác với XE_PL_SYSTEM và dừng lại nếu không thể lấy được. Tận dụng đường dẫn acquire hiện có của shrinker, điều này giúp khôi phục thiết bị trực tiếp nơi việc thu hồi (reclaim) cho phép làm vậy, hoặc đặt worker PM vào hàng đợi để quét sau đó. Dừng quá trình duyệt khi mục tiêu quét đã đạt được, do đó một lần quét thỏa mãn sẽ không đánh thức thiết bị. Bộ nhớ hệ thống vẫn được thu hồi ngay cả trong khi thiết bị đang ở trạng thái tạm ngưng.
Cài đặt điều kiện này dựa trên xe_device_is_l2_flush_optimized(), cùng điều kiện mà dưới đó xe_bo_trigger_rebind() thực hiện việc vô hiệu hóa cho vm (virtual memory) không phải chế độ lỗi, do đó việc thu hồi không bị ảnh hưởng ở các nơi khác. Bản sao System CCS đã có tham chiếu riêng của nó trong xe_bo_shrink().
Chỉ một vm không phải chế độ lỗi mới có thể tiếp cận được điều này, vì một vm chế độ lỗi yêu cầu LR mode và cái này giữ một tham chiếu runtime PM cho suốt vòng đời của vm.
Đã tái hiện với igt@xe_madvise@dontneed-before-exec trong khi GPU đang ở trạng thái tạm ngưng runtime.
v2: đơn giản hóa kiểm tra needs_rpm. (Matt) đặt lại thẻ Fixes vì sự cố xảy ra với đường dẫn non-fault-mode được thêm bởi 4e7ebff69aed. v3: xử lý điều này trong xe_shrinker.c thay vì xe_bo.c (Thomas) v4: dừng quá trình duyệt khi mục tiêu quét đã đạt được. (Sashiko) v5: rebase trên bản sửa lỗi kế toán trang đã giải phóng. (Sashiko) v6: tận dụng đường dẫn acquire của shrinker để runtime pm có thể được khôi phục trực tiếp thay vì luôn đặt worker vào hàng đợi. (Thomas) v7: thay thế xe_pm_runtime_put() bằng xe_shrinker_runtime_pm_put(). (Thomas)
(cherry picked from commit 628f92b28bf4c371c10207daf6fc4caee0c0db2e)
VulDB is the best source for vulnerability data and more expert information about this specific topic.