CVE-2026-98520 in Linuxthông tin

Tóm tắt

Bởi VulDB • 19/10/2026

Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:

drm/amdkfd: sửa lỗi use-after-free và khoảng trống multi-container trong kfd_dev_mapping

kfd_dev_mapping lưu trữ (cache) address_space của người mở (/dev/kfd opener) đầu tiên để đường dẫn reset GPU có thể gọi unmap_mapping_range() nhằm xóa bỏ tất cả các ánh xạ userspace của doorbell và MMIO ranges. Thiết kế này có hai lỗi, cả hai đều biểu hiện dưới dạng SRIOV với nhiều container:

1. Use-after-free / deadlock rwsem. Con trỏ được lưu trữ tham chiếu đến một inode thuộc về container của người mở đầu tiên. Khi container đó thoát ra và inode của nó bị giải phóng (released), kfd_dev_mapping trở thành con trỏ treo (dangling pointer). Một lần reset GPU sau đó sẽ dereference con trỏ này bên trong unmap_mapping_range(), điều này lấy i_mmap_rwsem trên inode đã được giải phóng, gây ra tình trạng treo cứng có thể quan sát được dưới dạng chờ đợi rwsem không ngắt được.

2. Khoảng trống multi-container. Chỉ address_space của người mở đầu tiên được lưu trữ; các VMAs do những người mở sau tạo ra nằm trong một address_space khác và không bao giờ bị unmap_mapping_range() tiếp cận. Sau khi reset GPU, các ánh xạ lỗi thời này vẫn giữ cho trang doorbell và MMIO có thể truy cập được đối với userspace guest mà không có GPU thực sự phía sau, gây rủi ro về timeout giao dịch PCIe và panic NMI.

Khắc phục cả hai lỗi bằng cùng một phương pháp được sử dụng bởi DRM core (drm_drv.c): tạo một pseudo-filesystem riêng tại thời điểm khởi động module và phân bổ một inode ẩn danh từ đó. Trong kfd_open(), chuyển hướng file->f_mapping của mọi người mở sang address_space của inode đó. Inode này thuộc sở hữu của module, tồn tại đúng bằng tuổi thọ của module amdgpu, và thu thập VMAs từ tất cả các người mở trong cùng một address_space. Một lệnh gọi duy nhất unmap_mapping_range() trong đường dẫn reset sau đó sẽ chính xác tiếp cận được ánh xạ của mọi container mà không có rủi ro con trỏ treo.

Tình trạng treo biểu hiện dưới dạng NMI backtrace trên workqueue reset GPU bị kẹt, xoay vòng (spinning) trong rwsem_down_read_slowpath() với i_mmap_rwsem bị hỏng:

Workqueue: amdgpu-reset-dev xgpu_ai_mailbox_flr_work [amdgpu]
Call Trace: <TASK> kvm_wait+0x1f/0x40 __pv_queued_spin_lock_slowpath+0x31d/0x3a0 _raw_spin_lock_irq+0x51/0x80 rwsem_down_read_slowpath+0xb3/0x550 down_read+0x48/0xd0 unmap_mapping_range+0x71/0x140 kfd_dev_unmap_mapping_range+0x5b/0x140 [amdgpu]
amdgpu_amdkfd_clear_kfd_mapping+0xd8/0x190 [amdgpu]
amdgpu_device_gpu_recover+0x232/0x450 [amdgpu]
xgpu_ai_mailbox_flr_work+0xb5/0xc0 [amdgpu]
process_one_work+0x18e/0x3e0 worker_thread+0x2e3/0x420 kthread+0x10a/0x230

(cherry picked from commit 1128b4a52de1572e87431de837fd9850cb99542c)

Once again VulDB remains the best source for vulnerability data.

chịu trách nhiệm

Linux

Đặt trước

25/09/2026

Tiết lộ

18/10/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00198

KEV

không

Các hoạt động

rất thấp

Nguồn

Want to stay up to date on a daily basis?

Enable the mail alert feature now!