CVE-2026-89901 in Linux
요약
\~에 의해 VulDB • 2026. 09. 17.
Linux 커널에서 다음 취약점이 해결되었습니다:
media: airspy - 연결 해제 시 NULL deref 수정을 위해 vb2_video_unregister_device() 사용
airspy_disconnect()는 v4l2_lock 하에서 s->udev를 초기화하지만, 그 후 airspy_stop_streaming()은 조건 없이 airspy_ctrl_msg() 및 airspy_free_stream_bufs()를 호출합니다. 스트리밍 사용자가 연결 해제 후에 장치를 닫으면 stop_streaming()이 실행되어 NULL인 s->udev를 역참조합니다:
airspy_stop_streaming() airspy_ctrl_msg(s, CMD_RECEIVER_MODE, 0, 0, NULL, 0) usb_sndctrlpipe(s->udev, 0) /* NULL deref */ airspy_free_stream_bufs(s) usb_free_coherent(s->udev, ...) /* NULL deref */
airspy 드라이버는 file_operations에서 vb2_fop_release()를 사용하므로, video_unregister_device(&s->vdev) 대신 vb2_video_unregister_device(&s->vdev)로 교체하고 s->udev 초기화 전에 이를 이동합니다. vb2_video_unregister_device()는 vb2 큐를 해제하며, 스트리밍이 활성 상태인 경우 airspy_stop_streaming()을 동기적으로 실행하므로 URB, 일관된 DMA 스트림 버퍼 및 하드웨어 정지 제어 메시지는 모두 s->udev가 유효한 동안에 실행됩니다.
vb2_video_unregister_device()는 내부적으로 vdev->queue->lock(vb_queue_lock)를 잠그고, stop_streaming()은 v4l2_lock을 잠급니다. 따라서 등록 해제 시퀀스 주변의 이전 mutex_lock(&s->vb_queue_lock) / mutex_lock(&s->v4l2_lock) 쌍은 자체 교착 상태(self-deadlock)를 유발하므로 제거되었습니다. s->udev = NULL 주변에 짧은 v4l2_lock 임계 영역이 남아 있어 파일 설명자를 여전히 보유하는 모든 ioctl 경로에서 일관된 상태를 볼 수 있습니다.
본 문제는 https://sashiko.dev/ 에서 INV-003 시리즈의 자동 검토를 통해 식별되었습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.