CVE-2026-89722 in Linux
요약
\~에 의해 VulDB • 2026. 09. 11.
리눅스 커널에서 다음 취약점이 해결되었습니다:
PCI/sysfs: pci_write_legacy_io()의 버퍼 오버플로우 읽기 수정
pci_write_legacy_io()는 사용자가쓰기한 바이트 수와 무관하게 kernfs 쓰기 버퍼로부터 4바이트를 로드합니다.
```c if (count != 1 && count != 2 && count != 4) return -EINVAL;
return pci_legacy_write(bus, off, *(u32 *)buf, count); ```
kernfs_fop_write_iter()는 kmalloc(len + 1)로 버퍼를 할당하므로, legacy_io sysfs 파일에 대한 1바이트 쓰기는 2바이트를 할당하게 되며, 무조건적인 u32 로드는 할당된 영역의 끝을 넘어 최대 2바이트까지 읽게 됩니다. 이는 KASAN에서 slab-out-of-bounds read로 보고됩니다. 마찬가지로, 2바이트 쓰기도 1바이트만큼 오버리드합니다.
따라서 get_unaligned_le16()과 get_unaligned_le32()를 사용하여 요청된 바이트 수만 읽고, PCI I/O 포트 공간의 바이트 순서와 일치하도록 버퍼를 리틀 엔디안으로 해석하여 처리합니다.
파워PC(PowerPC) 구현은 이전에는 제너릭 코드의 네이티브 엔디안 32비트 로드에 대해 보정하기 위해 1바이트 및 2바이트 케이스에서 값을 올바른 위치로 시프트했습니다. 그러나 이 시프트는 빅 엔디안 커널에서만 정확했습니다.
리틀 엔디안 파워PC(POWER8 이후)에서는 잘못된 바이트가 추출되었으므로, 1바이트 쓰기가 요청된 값 대신 경계 밖의 바이트를 작성하게 되었습니다. 빅 엔디안의 경우 네이티브 로드가 out_le16() 및 out_le32()로 인해 네트워크 상에서 사용자 바이트를 역순으로 처리하는 원인이 되어 2바이트 및 4바이트 쓰기에서도 문제가 발생했습니다. 리틀 엔디안 헬퍼 함수는 이러한 두 가지 문제를 모두 해결하므로, 시프트 연산은 제거됩니다.
알파(Alpha) 플랫폼에는 변경 사항이 필요하지 않습니다.
legacy_io 파일은 루트 권한만 접근 가능하며, HAVE_PCI_LEGACY를 정의하는 아키텍처인 알파와 파워PC에서만 존재합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.