CVE-2026-80861 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
usb: xhci: 컨트롤러에 접근할 수 없는 경우 설정을 중단함
xhci_gen_setup()는 첫 번째 레지스터에서 읽은 capability 길이를 사용하여 운영 레지스트리를 찾습니다.
xhci->op_regs = hcd->regs + HC_LENGTH(readl(&xhci->cap_regs->hc_capbase));
컨트롤러가 고장 났거나 버스에서 분리된 경우, 해당 read는 ~0를 반환하고 HC_LENGTH()는 이를 0xff로 절사하며 op_regs는 페이지 정렬된 MMIO 베이스보다 0xff 바이트 뒤쪽, 즉 비정렬(unaligned) 위치에 있게 됩니다. 그 다음 첫 번째 접근인 xhci_halt() -> xhci_handshake()에서 op_regs->status를 읽을 때 장치 메모리에 대한 비정렬 readl()이 발생합니다. arm64는 비정렬된 장치 액세스에 대해 예외(faults)를 발생시키므로, xhci_handshake()가 모든 비트가 1인 값을 포착하고 -ENODEV를 반환하는 대신 설정 과정에서 oops(커널 패닉 등)가 발생합니다:
xhci-pci-renesas 0005:08:00.0: D3cold에서 D0로 전원 상태를 변경할 수 없음, 장치에 접근 불가 xhci-pci-renesas 0005:08:00.0: xHCI 호스트 컨트롤러 xhci-pci-renesas 0005:08:00.0: 새 USB 버스 등록됨, 버스 번호 1 할당됨 가상 주소 ffff80030a770103에서 커널 페이지 요청 처리 불가 ESR = 0x0000000096000021 FSC = 0x21: 정렬 오류(alignment fault) 내부 오류: Oops: 0x0000000096000021 [#1] SMP
pc : xhci_halt [xhci_hcd]
호출 추적(Call trace): xhci_halt xhci_gen_setup xhci_pci_setup usb_add_hcd usb_hcd_pci_probe xhci_pci_common_probe xhci_pci_renesas_probe
이 문제는 전원이 올라가지 않아("D3cold에서 D0로 전원 상태를 변경할 수 없음, 장치에 접근 불가") 실패했지만 여전히 HCD probe 경로에 도달한 Renesas uPD720201에서 발생했습니다.
capability 레지스터를 한 번만 읽고, 모든 비트가 1인 값(xhci_handshake() 및 xhci_reset()이 이미 테스트하는 값)으로 읽혀지면 op_regs가 유도되기 전에 -ENODEV로 설정을 중단합니다. 이를 한 번만 읽음으로써 동시 핫 제거(hot-removal) 시 변경될 수 있는 레지스터를 다시 읽는 것도 방지됩니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.