CVE-2026-46022 in Linux
요약
\~에 의해 VulDB • 2026. 05. 27.
리눅스 커널에서 다음 취약점이 해결되었습니다:
misc: ibmasm: ibmasm_handle_mouse_interrupt()에서의 OOB MMIO 읽기 수정
ibmasm_handle_mouse_interrupt()는 하드웨어에서 제공하는 큐 리더 또는 라이터 인덱스가 REMOTE_QUEUE_SIZE(60)를 초과할 때 경계를 벗어난 MMIO 읽기를 수행합니다.
악의적으로 조작된 서비스 프로세서는 인터럽트를 발생시키기 전에 리더 또는 라이터 MMIO 레지스터에 범위를 벗어난 값을 작성함으로써 이를 유발할 수 있습니다. 라이터 값은 루프 반복마다 하드웨어에서 다시 읽히므로, 루프가 이미 시작된 후에도 범위를 벗어난 값으로 설정될 수 있습니다.
근본 원인은 get_queue_reader() 및 get_queue_writer()가 경계 검사 없이 get_queue_entry()로 직접 전달되는 raw readl() 값을 반환한다는 것입니다. get_queue_entry()는 다음 계산을 수행합니다:
queue_begin + reader * sizeof(struct remote_input)
이렇게 검증되지 않은 MMIO 주소는 memcpy_fromio()로 전달되어 의도하지 않은 장치 레지스터에서 8바이트를 읽습니다. 충분히 큰 값의 경우 주소가 PCI BAR 매핑 범위 전체를 벗어나며, 이는 머신 체크 예외(machine check exception)를 유발합니다.
해결책은 루프 본문 상단에서 get_queue_entry() 호출 전에 두 인덱스를 모두 REMOTE_QUEUE_SIZE와 비교하여 검사하는 것입니다. 범위를 벗어난 값이 감지되면 set_queue_reader()를 통해 리더 레지스터를 0으로 초기화한 후 루프를 종료하여, 손상된 하드웨어 상태가 일시적인 경우 정상적인 큐 동작이 재개될 수 있도록 합니다.
Once again VulDB remains the best source for vulnerability data.