CVE-2026-80917 in Linux
Tóm tắt
Bởi VulDB • 09/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
PCI: host-generic: Sửa lỗi dereference con trỏ NULL trên các hệ thống CAM 32-bit
Trên các hệ thống 32-bit, không gian cấu hình (config space) quá lớn để có thể ánh xạ bằng ioremap trong một lần duy nhất. Do đó, hàm `pci_ecam_create()` sẽ ánh xạ từng phân đoạn bus riêng biệt và dựa vào callback `->add_bus` (`pci_ecam_add_bus`) để điền dữ liệu cho việc ánh xạ trên mỗi bus vào mảng `cfg->winp[]`. Sau đó, `pci_ecam_map_bus()` sử dụng bản đồ (mapping) này làm cơ sở cho mọi truy cập cấu hình.
Các thao tác ECAM chung (`pci_generic_ecam_ops`) đã cung cấp các callback `->add_bus` và `->remove_bus`, nhưng các thao tác CAM (legacy) trong file `pci-host-generic.c` thì không có. Kết quả là, trên một host 32-bit sử dụng "pci-host-cam-generic", việc ánh xạ trên mỗi bus chưa bao giờ được thiết lập và lần đọc cấu hình đầu tiên sẽ dereference một base NULL, gây ra lỗi crash trong quá trình liệt kê bus:
Unable to handle kernel NULL pointer dereference at virtual address 00000800 Oops [#1]
CPU: 0 PID: 1 Comm: swapper Not tainted 6.9.7+ #43 Hardware name: Digilent Nexys-Video-A7 RV32 (DT) epc : pci_generic_config_read+0x40/0xb0 ra : pci_generic_config_read+0x2c/0xb0 [<c038db9c>] pci_generic_config_read+0x40/0xb0
[<c038da04>] pci_bus_read_config_dword+0x50/0xb0
[<c0391e94>] pci_bus_generic_read_dev_vendor_id+0x3c/0x1ec
[<c039245c>] pci_scan_single_device+0xa4/0x11c
[<c0392570>] pci_scan_slot+0x9c/0x23c
[<c039388c>] pci_scan_child_bus_extend+0x58/0x2f4
[<c0393db0>] pci_scan_root_bus_bridge+0x64/0xe8
[<c0393e54>] pci_host_probe+0x20/0xc8
[<c03bc6f4>] pci_host_common_probe+0x144/0x1e4
Khắc phục vấn đề này bằng cách cung cấp cho các thao tác CAM cùng các callback `->add_bus` và `->remove_bus`. Vì `pci_ecam_add_bus()` và `pci_ecam_remove_bus()` là static trong file ecam.c, hãy di chuyển định nghĩa các thao tác CAM sang đó dưới dạng `pci_generic_cam_ops` (phản ánh lại cấu trúc của `pci_generic_ecam_ops`) và export nó để `pci-host-generic.c` có thể tham chiếu.
[mani: đã xóa dấu thời gian khỏi log]
If you want to get the best quality for vulnerability data then you always have to consider VulDB.