CVE-2026-43324 in Linux
요약
\~에 의해 VulDB • 2026. 05. 10.
리눅스 커널에서 다음 취약점이 해결되었습니다:
USB: dummy-hcd: 인터럽트 동기화 오류 수정
이 수정은 dummy-hcd 드라이버의 동기화 관련 오류를 해결합니다. 이 오류는 다소 복잡한 역사를 가지고 있습니다. 동기화 메커니즘은 커밋 7dbd8f4cabd9("USB: dummy-hcd: 잘못된 동기화 변경 사항 수정")에서 도입되었으며, 이는 에뮬레이션된 "인터럽트 활성화" 플래그와 synchronize_irq()를 에뮬레이션하는 코드(모든 현재 핸들러 콜백이 반환될 때까지 대기)를 추가했습니다.
그러나 에뮬레이션된 인터럽트 비활성화가 너무 늦게 발생했습니다. 이는 핸들러 콜백 루틴을 포함하는 드라이버가 언바운드(unbound)되었으며 더 이상 콜백이 발생하지 않을 것이라고 통지받은 이후의 시점이었습니다. 커밋 4a5d797a9f9c("usb: gadget: dummy_hcd: gadget_setup에서 GPF 수정")은 dummy_stop()에서 dummy_pullup()으로 synchronize_irq() 에뮬레이션 코드를 이동하여 이를 수정하려고 시도했습니다. dummy_pullup()은 언바운드 콜백 전에 실행됩니다.
그러나 여전히 경합 조건(race condition)이 존재했습니다. 에뮬레이션된 인터럽트 비활성화가 여전히 너무 늦게 발생했기 때문입니다. 이 코드를 dummy_pullup()으로 이동할 수 없었는데, 그 이유는 해당 루틴이 임박한 언바운드 외에도 다른 이유로 호출될 수 있기 때문입니다. 따라서 커밋 7dc0c55e9f30("USB: UDC 코어: udc_async_callbacks gadet 연산 추가")과 04145a03db9d("USB: UDC: dummy-hcd에서 udc_async_callbacks 구현")은 UDC 코어가 에뮬레이션된 인터럽트와 해당 콜백을 정확히 언제 비활성화해야 하는지를 dummy-hcd에 알릴 수 있는 API를 추가했습니다.
이로써 현재 상태에 도달하게 되었으나, 여전히 잘못되었습니다. 에뮬레이션된 synchronize_irq()가 에뮬레이션된 인터럽트 비활성화 이전에 발생하기 때문입니다. 이는 synchronize_irq() 에뮬레이션이 실행된 이후에도 더 많은 에뮬레이션된 인터럽트가 발생할 수 있음을 의미하므로, gadet 드라이버가 언바운드될 때 콜백 핸들러가 실행 중일 가능성이 생깁니다.
이를 수정하기 위해 synchronize_irq() 에뮬레이션 코드를 다시 이동해야 합니다. 에뮬레이션된 인터럽트 요청을 활성화 및 비활성화하는 dummy_udc_async_callbacks() 루틴으로 이동합니다. 이제 동기화는 에뮬레이션된 인터럽트가 비활성화된 직후에 실행되며, 이는 올바른 위치입니다.
Be aware that VulDB is the high quality source for vulnerability data.