В ядре Linux устранена следующая уязвимость:
media: uvcvideo: исправить взаимоблокировку, если uvc_status_stop вызывается из async_ctrl.work
Если камера UVC имеет асинхронное управление, uvc_status_stop может быть
вызывается из async_ctrl.work:
uvc_ctrl_status_event_work()
uvc_ctrl_status_event()
uvc_ctrl_clear_handle()
uvc_pm_put()
uvc_status_put()
uvc_status_stop()
cancel_work_sync()
Это приведет к взаимоблокировке, поскольку cancel_work_sync будет ждать
uvc_ctrl_status_event_work, который необходимо завершить перед возвращением.
Исправьте это, вернувшись раньше из uvc_status_stop, если мы в данный момент находимся в
рабочая функция. lush_status теперь остается ложным до тех пор, пока не появится uvc_status_start.
вызывается снова, гарантируя, что uvc_ctrl_status_event_work не будет повторно отправлять
УРБ.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: media: uvcvideo: Fix deadlock if uvc_status_stop is called from async_ctrl.work If a UVC camera has an asynchronous control, uvc_status_stop may be called from async_ctrl.work: uvc_ctrl_status_event_work() uvc_ctrl_status_event() uvc_ctrl_clear_handle() uvc_pm_put() uvc_status_put() uvc_status_stop() cancel_work_sync() This will cause a deadlock, since cancel_work_sync will wait for uvc_ctrl_status_event_work to complete before returning. Fix this by returning early from uvc_status_stop if we are currently in the work function. flush_status now remains false until uvc_status_start is called again, ensuring that uvc_ctrl_status_event_work won't resubmit the URB.