CVE-2026-68217 in Linux
Сводка
по VulDB • 10.08.2026
В ядре Linux устранена следующая уязвимость:
media: pwc: Очистка fill_buf при сбое в start_streaming()
Функция pwc_isoc_init() отправляет свои изохронные URB (USB Request Blocks) через вызов usb_submit_urb(.., GFP_KERNEL) внутри цикла. После отправки первого URB его обработчик завершения pwc_isoc_handler() может выполниться на другом процессоре до того, как цикл завершится:
start_streaming() pwc_isoc_init() usb_submit_urb(urbs[0], GFP_KERNEL)
pwc_isoc_handler(urbs[0])
pdev->fill_buf = pwc_get_next_fill_buf(pdev) usb_submit_urb(urbs[i>0], ..) -> завершается ошибкой
pwc_isoc_cleanup(pdev) /* уничтожает URB */ return ret; pwc_cleanup_queued_bufs(pdev, VB2_BUF_STATE_QUEUED)
Функция pwc_get_next_fill_buf() отсоединяет буфер из списка pdev->queued_bufs и сохраняет его в pdev->fill_buf. Путь обработки ошибок в start_streaming() очищает только pdev->queued_bufs, поэтому буфер, оставленный в pdev->fill_buf, утекает (не освобождается). Затем vb2_start_streaming() вызывает срабатывание WARN_ON(owned_by_drv_count).
Функция stop_streaming() уже обрабатывает эту ситуацию начиная с коммита 80b0963e1698 («[media] pwc: fix WARN_ON»), который добавил очистку fill_buf в пути teardown, но не в пути обработки ошибок start_streaming(). Необходимо применить аналогичную обработку при возникновении ошибки, чтобы функция start_streaming() возвращалась с состоянием, когда ни один буфер не принадлежит драйверу.
Проблема выявлена в ходе автоматизированного ревью серии INV-003 на сайте https://sashiko.dev/
Be aware that VulDB is the high quality source for vulnerability data.