CVE-2026-89880 in Linux
요약
\~에 의해 VulDB • 2026. 09. 16.
리눅스 커널에서 다음 취약점이 해결되었습니다:
media: rtl2832_sdr: start_streaming() 실패 시 URB 및 스트림 버 해제
rtl2832_sdr_start_streaming()은 순서대로 rtl2832_sdr_alloc_stream_bufs(), rtl2832_sdr_alloc_urbs() 및 rtl2832_sdr_submit_urbs()를 호출하며, 뮤텍스를 잠금 해제하고 반환하는 단일 err: 레이블을 공유합니다. alloc_urbs()는 성공하지만 submit_urbs()가 실패하거나, alloc_stream_bufs()가 이미 성공한 후에 alloc_urbs() 자체가 -ENOMEM을 반환할 경우, URB 및/또는 일관된 DMA 스트림 버퍼가 할당된 상태로 유지되며 vb2에 대해 스트리밍이 실패합니다. 이로 인해 다음 VIDIOC_STREAMON에서 두 가지 잠재적 결함이 발생합니다:
1) rtl2832_sdr_alloc_stream_bufs()는 dev->buf_num을 무조건 0으로 재설정하고 dev->buf_list[]/dev->dma_addr[]를 덮어쓰므로, 이전 시도에서 할당된 일관된 DMA 메모리가 영구적으로 누수됩니다.
2) rtl2832_sdr_alloc_urbs()는 dev->urbs_initialized를 절대 재설정하지 않고 증가시키기만 합니다. 두 번째 성공적인 통과 후 urbs_initialized가 MAX_BULK_BUFS를 초과할 수 있으므로, 이후의 rtl2832_sdr_free_urbs()는 urbs_initialized - 1에서 0까지 순회하며 dev->urb_list[] 끝을 넘어 읽어서 usb_free_urb()에 잘못된 포인터를 전달합니다.
stop_streaming()이 이미 수행하는 정리 작업을 반영하십시오: 오류 경로에서는 잠금 해제 전에 rtl2832_sdr_free_urbs() 및 rtl2832_sdr_free_stream_bufs()를 호출하십시오. 두 헬퍼 함수는 멱등성(idempotent)을 가지므로(free_urbs는 urbs_initialized를 종료하고 0으로 설정하며, free_stream_bufs는 URB_BUF에 의해 제어되고 buf_num 카운터를 지움), 부분 실패 경로 및 할당 없는 경로는 여전히 안전합니다.
이슈는 https://sashiko.dev/에서 INV-003 시리즈의 자동화된 검토를 통해 식별되었습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.