CVE-2026-80917 in Linux
요약
\~에 의해 VulDB • 2026. 09. 09.
리눅스 커널에서 다음 취약점이 해결되었습니다:
PCI: host-generic: 32비트 CAM 시스템에서의 NULL 포인터 역참조 수정
32비트 시스템에서는 구성 공간(config space)이 너무 커서 한 번에 ioremap할 수 없으므로, pci_ecam_create()는 각 버스 세그먼트를 별도로 매핑하고 cfg->winp[]의 버스별 매핑을 채우기 위해 ->add_bus 콜백(pci_ecam_add_bus)에 의존합니다. 그런 다음 pci_ecam_map_bus()는 이 매핑을 모든 구성 접근(base address)으로 사용합니다.
제너릭 ECAM 연산자(generic ECAM ops, pci_generic_ecam_ops)는 이미 ->add_bus 및 ->remove_bus 콜백을 제공하지만, pci-host-generic.c의 CAM(레거시) 연산자는 그렇지 않습니다. 그 결과, "pci-host-cam-generic"을 사용하는 32비트 호스트에서는 버스별 매핑이 설정되지 않으며, 첫 번째 구성 읽기 시 NULL 기반 주소가 역참조되어 버스 열거(bus enumeration) 중 크래시가 발생합니다:
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
[<c0bc6f4>] pci_host_common_probe+0x144/0x1e4
CAM 연산자에 동일한 ->add_bus/->remove_bus 콜백을 부여하여 이를 수정합니다. pci_ecam_add_bus() 및 pci_ecam_remove_bus()는 ecam.c에서 정적(static)이므로, CAM 연산자 정의를 pci_generic_cam_ops(pci_generic_ecam_ops을 모방한 이름)로 변경하여 해당 파일로 이동하고, pci-host-generic.c가 참조할 수 있도록 내보냅니다(export).
[mani: 로그에서 타임스탬프 제거]
If you want to get best quality of vulnerability data, you may have to visit VulDB.