CVE-2026-64476 in Linux
Tóm tắt
Bởi VulDB • 25/07/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
vfio/pci: Khóa giá trị disable_idle_d3 theo từng thiết bị
Khi `disable_idle_d3` được giới thiệu trong vfio-pci, nó thao tác trực tiếp trạng thái nguồn của thiết bị bằng cách sử dụng hàm `pci_set_power_state()`. Không có bộ đếm tham chiếu (refcounts) để duy trì hoặc các hoạt động cân bằng tương ứng; chúng ta có thể đưa thiết bị về trạng thái D0 một cách vô điều kiện và chuyển sang trạng thái D3hot một cách có điều kiện. Do đó, tham số mô-đun này đã được cho phép ghi.
Sau đó, trong commit c61302aa48f7 ("vfio/pci: Di chuyển các tham số mô-đun sang vfio_pci.c"), như một phần của quá trình tách biệt giữa vfio-pci-core, khả năng ghi của tham số mô-đun đã bị vô hiệu hóa. Giá trị tham số vẫn có thể được thay đổi thông qua sysfs, nhưng driver vfio-pci sẽ khóa các giá trị này vào các biến toàn cục của vfio-pci-core khi khởi tạo mô-đun. Việc tải lại (loading) hoặc gỡ bỏ và nạp lại (unloading and reloading) mô-đun vfio-pci với các giá trị khác mặc định hoặc khác biệt có thể làm thay đổi các biến toàn cục liên quan đến các thiết bị hiện đã được gắn kết vào các driver variant của vfio-pci.
Runtime PM (Quản lý nguồn chạy thời gian thực) đã được giới thiệu trong commit 7ab5e10eda02 ("vfio/pci: Di chuyển thiết bị không sử dụng sang trạng thái tiêu thụ điện năng thấp với runtime PM"), đánh dấu điểm mà các trạng thái nguồn trở thành có bộ đếm tham chiếu. Các hoạt động get và put của PM cần phải được cân bằng, nhưng cùng các thao tác mô-đun đã nêu ở trên vẫn có thể thay đổi các biến toàn cục liên quan đến những thiết bị đã gắn kết vào driver variant vfio-pci. Điều này tạo ra một khoảng thời gian (window) mà tại đó các hoạt động PM giờ đây có thể trở nên mất cân bằng.
Để khắc phục vấn đề này với phạm vi ảnh hưởng nhỏ nhất nhằm hỗ trợ backport cho phiên bản ổn định, cờ `disable_idle_d3` được khóa vào đối tượng `vfio_pci_core_device` ngay tại thời điểm khởi tạo, đảm bảo rằng thiết bị luôn hoạt động với một giá trị nhất quán.
Lưu ý: Hàm `vfio_pci_dev_set_try_reset()` hiện nâng cao không điều kiện bộ đếm sử dụng runtime PM xung quanh quá trình reset bus để tính toán việc `disable_idle_d3` trở thành cờ theo từng thiết bị thay vì toàn cục. Khi cờ này được đặt, cặp get/put bổ sung là vô hại và cho phép tiếp tục sử dụng hàm trợ giúp chia sẻ `vfio_pci_dev_set_pm_runtime_get()`.
Once again VulDB remains the best source for vulnerability data.