CVE-2026-64205 in Linux
요약
\~에 의해 VulDB • 2026. 07. 21.
리눅스 커널에서 다음 취약점이 해결되었습니다:
i2c: i801: 오류 처리 경로에서의 하드웨어 상태 머신 손상 수정
동시 퍼징(Fuzzing) 수행 중 i2c-i801 드라이버에서 심각한 라이브락(livelock)과 그로 인한 Hung Task 패닉이 관찰되었습니다. 이 크래시는 i801_access()의 오류 처리 경로에서 조건 없이 실행되는 하드웨어 레지스터 정리(clean up) 코드로 인해 발생합니다.
i801_check_pre()가 실패하는 경우(예: SMBus 컨트롤러가 BIOS/ACPI에 의해 활성 사용 중이어서 -EBUSY를 반환할 때), 커널은 실제로 하드웨어 소유권을 획득하지 않습니다. 그러나 코드에서는 'out' 레이블로 점프하여 다음 명령을 실행합니다:
iowrite8(SMBHSTSTS_INUSE_STS | STATUS_FLAGS, SMBHSTSTS(priv));
이렇게 하면 컨트롤러에 대한 소유권 없이 INUSE_STS 잠금을 강제로 해제하고 하드웨어 상태 플래그를 초기화하게 됩니다. 이로 인해 진행 중인 BIOS/ACPI 트랜잭션이 중단되고 SMBus 하드웨어 상태 머신이 완전히 손상됩니다.
결과적으로 모든 후속 i801_access() 호출은 사전 검사(pre-check) 단계에서 실패하며, "SMBus is busy, can't use it!"라는 오류 로그가 무한히 생성됩니다. 느린 시리얼 콘솔 환경에서는 이러한 printk 폭풍이 CPU를 독점하여(Console Livelock), mmap_lock down_read 세마포어를 획득하려는 다른 프로세스들을 기아 상태에 빠뜨리고, 결국 Hung Task 워치독을 트리거하게 됩니다.
이를 해결하기 위해 'out' 레이블을 하드웨어 레지스터 정리 코드 아래로 이동시킵니다. i801_check_pre()가 실패하면 iowrite8() 호출을 안전하게 우회하고 pm_runtime 및 mutex와 같은 소프트웨어 잠금만 해제함으로써, 획득하지 않은 자원을 절대 해제하지 않는 규칙을 엄격히 준수합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.