CVE-2026-68222 in Linux
요약
\~에 의해 VulDB • 2026. 08. 10.
리눅스 커널에서 다음 취약점이 해결되었습니다:
미디어: msi2500: start_streaming() 실패 시 큐에 쌓인 버퍼 반환
vb2 프레임워크는 start_streaming()을 호출하기 전에 buf_queue()를 통해 드라이버로 버퍼를 전달합니다. 만약 start_streaming()이 vb2_buffer_done()을 통해 해당 버퍼들을 먼저 반환하지 않고 에러를 리턴하면, vb2_start_streaming()은 WARN_ON(owned_by_drv_count)를 발생시키며 큐에 쌓인 버퍼가 누설(leak)됩니다.
msi2500_start_streaming()에는 이 함정에 모두 빠지는 5개의 오류 경로(error paths)가 있었으며, 호출 간 ret 변수의 덮어쓰기로 인해 더욱 복잡하게 얽혀 있었습니다:
- USB 장치가 이미 연결 해제되었을 때 -ENODEV - mutex_lock_interruptible()이 인터럽트될 때 -ERESTARTSYS - msi2500_set_usb_adc() 실패: 다음 호출(msi2500_isoc_init)에 의해 ret가 묵시적으로 덮어써져 오류 코드가 완전히 손실됨 - msi2500_isoc_init() 실패: cleanup_queued_bufs가 호출되었으나, 함수는 계속 진행되어 msi2500_ctrl_msg()로 이어졌으며 다시 ret를 덮어쓰면서 원래 오류를 가림(mask) - msi2500_ctrl_msg(CMD_START_STREAMING) 실패: 전혀 정리(cleanup)되지 않아 isoc URB들이 제출된 상태로 남아 드라이버가 이를 소비할 방법이 없음
오류 경로들을 작은 goto 체인으로 통합했습니다. 이제 모든 실패는 함수를 중단하고, 큐에 쌓인 버퍼 목록을 비우며(drains), 실제 오류 코드를 반환합니다. ctrl_msg 실패 경로는 잠금 해제 및 비우기 전에 msi2500_isoc_cleanup()을 통해 선행된 msi2500_isoc_init()도 롤백합니다.
정리 헬퍼 함수는 vb2_buffer_state 인수를 받도록 하여, start_streaming 오류 경로에서는 사용자 공간에서 기대하는 대로(VB2_BUF_STATE_QUEUED) 전달할 수 있게 되었으며, stop_streaming은 기존 VB2_BUF_STATE_ERROR 세미antics를 유지합니다.
이는 커밋 4cf3b6fd54eb("media: uvcvideo: Return queued buffers on start_streaming() failure")의 uvcvideo 수정 사항을 반영한 것입니다.
Once again VulDB remains the best source for vulnerability data.