🇰🇷 한글 설명
Linux 커널의 uvcvideo 드라이버에서 스트리밍 시작 실패 시 대기 중인 버퍼를 반환하지 않는 문제입니다. uvc_pm_get() 오류로 인해 스트리밍 시작이 실패할 때 할당된 버퍼 리소스가 제대로 해제되지 않아 메모리 누수 및 경고가 발생합니다.
💡 쉬운 설명
USB 카메라(웹캠) 장치가 영상 전송을 시작할 때 실패하면 예약된 메모리 버퍼가 비워지지 않는 커널 버그입니다. 이로 인해 시스템 경고가 발생하고 리소스 누수가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
media: uvcvideo: Return queued buffers on start_streaming() failure
Return buffers if streaming fails to start due to uvc_pm_get() error.
This bug may be responsible for a warning I got running
while :; do yavta -c3 /dev/video0; done
on an xHCI controller which failed under this workload.
I had no luck reproducing this warning again to confirm.
xhci_hcd 0000:09:00.0: HC died; cleaning up
usb 13-2: USB disconnect, device number 2
WARNING: CPU: 2 PID: 29386 at drivers/media/common/videobuf2/videobuf2-core.c:1803 vb2_start_streaming+0xac/0x120
📍 영향받는 시스템
Linux kernel 5.10+ 에서 uvcvideo 드라이버를 사용하는 모든 xHCI USB 컨트롤러 장치
⚔️ 공격 벡터
로컬: 반복적인 USB 비디오 캡처 장치(웹캠, USB 카메라) 연결/스트리밍 시도를 통해 DoS 유발 가능
🛡️ 대응 방법
Linux kernel을 5.15+ 버전 이상으로 업그레이드하거나 uvcvideo 드라이버 패치 적용
🔧 검증 코드
명령어 실행 후 'vb2_start_streaming', 'HC died', 'uvcvideo' 관련 경고나 오류가 출력되면 영향받을 가능성이 있으며, USB 비디오 장치 로그가 없으면 시스템이 취약하지 않음을 의미합니다.
dmesg | grep -E 'vb2_start_streaming|HC died|uvcvideo' | tail -5