LINUX.ORG.RU
Ответ на: комментарий от ox55ff

Да тут даже дело не столько в C, сколько в самой архитектуре. Зачем в ядре что-то декодировать? Складывай тупо в буферы, пускай юзерспейс их выгребает и там сегфолтится сколько душе угодно.

vbr ★★★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от goingUp

Parse the frame descriptors. Only uncompressed, MJPEG and frame based formats have frame descriptors.

Разве это не декодирование? Ну может не полное.

vbr ★★★★★
() автор топика
Ответ на: комментарий от vbr

Как бы uncompressed намекает. Наверное нельзя выплюнуть как есть поток с камеры, нужно немного что-то распарсить и преобразовать, чтобы был единый интерфейс.

goingUp ★★★★★
()
Ответ на: комментарий от vbr

Зачем в ядре что-то декодировать?

Мне кажется это в драйвере имеет значение, у меня есть девайс, работающий через это UVC, который поток может выдавать либо в mjpeg, либо в то что там называется RAW, и сказать что я хочу получить я должен перед тем как начать получать данные. А драйвера у нас в ведре.

micronekodesu ★★★
()
Ответ на: комментарий от ox55ff

Ну это уже совсем дятлом надо быть. Думаю, в ядре для этого есть готовые структуры/функции.

vbr ★★★★★
() автор топика
Ответ на: комментарий от vbr

А когда-то вся графика и видеодрайверы были целиком в пространстве пользователя в виде модулей X11. Потом какой-то идиот зачем-то выдумал засунуть всё в ядро.

Скоро видимо будет ядерный Wayland композитор.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от vbr

Ну вот есть фс, у нее формат данных на блочном устройства один, а в оперативке другой. Кто-то должен байтики перекладывать из одного в другое. Аналогично с сетевым стеком. Оно можно делать это и в юзерленде, но получается многовато переключений контекста

cobold ★★★★★
()
Последнее исправление: cobold (всего исправлений: 1)
Ответ на: комментарий от cobold

Современные видеокарты умеют исполнять команды напрямую из клиента пользовательского режима через MMIO doorbell, но ретрограды разработчики ядра всё ещё не освоили эту технологию и им надо чтобы всё запросы проходили через ядро и DRM планировщик.

X512 ★★★★★
()
Ответ на: комментарий от cobold

Про ФС и сетевой стек рассуждать не буду, а про видео всё же не соглашусь, т.к. с похожими задачами работал.

Необходимость видео в ядре мне вообще не понятна. Видеокамера подключается по USB. В USB встроен функционал чтения данных во внутренние буферы. Т.е. юзерспейс просто берёт себе USB-устройство, и в цикле вычитывает буферы из нужных эндпоинтов. Для этого в линуксе уже есть все API, пример использования - см. libusb. А дальше всё парсит. Никаких особых переключений контекста тут нет. Не больше, чем у любой другой программы, работающей с той же сетью. Тебя же не парит, что при просмотре ютуба у тебя переключения контекста идут при получении байтов из сокета.

vbr ★★★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Т.е. юзерспейс просто берёт себе USB-устройство, и в цикле вычитывает буферы из нужных эндпоинтов. А дальше всё парсит.

Более того, это уже сделано и работает: https://github.com/libuvc/libuvc.

X512 ★★★★★
()
Ответ на: комментарий от vbr

Не, судя по коду это метаданные всякие вытаскивает – bpp, colorspace, etc.

snizovtsev ★★★★★
()
Ответ на: комментарий от X512

Ретрограды разработчики ядра ещё помнят, что от ОС могут хотеть разделения доступа и ресурсов. Васяны запускающие свой монолит от рута, чтобы добраться до MMIO dorbell и получить +5% производительности не являются примером для подражания разработчикам ядра.

snizovtsev ★★★★★
()
Ответ на: комментарий от snizovtsev

Там всю планировку выполняет само железо видеокарты. Можно на уровне железа указывать приоритеты и т.д..

X512 ★★★★★
()

Это не проблема ядра, на самом деле, а проблема уродства под названием USB рождённого при непосредственном участии Microsoft.

Абсолютно любую ОС можно завалить USB девайсом со специально модифицированными дескрипторами. Для эксплуатации вышеописанной уязвимости нужно сделать USB девайс который изображает из себя UVC-камеру c хренью в дескрипторах. Более того, легко можно сделать девайс, который будет обходить этот фикс. Достаточно в дескрипторах навертеть хрени - в размере/типе/количестве дескрипторов указать одно, а самих дескрипторах - другое.

Есть, кстати, микрухи USB хостов и чипсеты с USB контроллером, которые можно с помощью специально сделанного USB девайса заставить писать через DMA данные за границы выделенного для endpoint DMA буфера. :) Никакая ОС в этом случае ничем не поможет.

USB - это лютейший кал начиная с самой мякотки. С ним всегда будут проблемы.

PS: специально сделанным USB девайсом можно заставить венду при втыкании этого девайса установить произвольный бинарник как драйвер любого, даже не USB девайса, кстати. Без каких-либо вопросов к юзеру. :) Очень полезно, кстати, с последними Win11 которая не даёт ставить неподписанные Microsoft драйвера в принципе. Хотя есть и другие варианты, типа того который используется в libwdi/Zadig, хотя он требует подтверждения от юзера.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Интересно, USBGuard как я понимаю тоже не спасёт? Печально это, usb девайс соорудить в наш век когда микроконтроллеры на каждом углу валяются сможет каждый школьник.

snizovtsev ★★★★★
()
Ответ на: комментарий от snizovtsev

Не, не спасёт. Там на уровне железа и протокола можно накосячить запросто. Слишком большое количество всяких классов и дескрипторов придуманных без какой-либо задней мысли о безопасности и fool-proof.

Однако, очевидно что для всех этих развлекух нужен физический доступ к компу. А с физическим доступом можно много чего с компом сделать и для этого необязательно брать микроконтроллер и делать USB девайс.

Теоретически, можно такой девайс замаскировать под флешку и подсунуть её жертве, но если жертва имеет обыкновение совать незнакомые флешки в свой комп, то можно и обычной флешкой обойтись, или вообще письмо с патчем Бармина прислать.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Это не проблема ядра, на самом деле, а проблема уродства под названием USB рождённого при непосредственном участии Microsoft.

С какой стати отсутствие проверки входных данных в драйвере стало проблемой USB?

Я смотрю Stanson очень любит находить теории заговора повсюду.

X512 ★★★★★
()
Ответ на: комментарий от X512

С какой стати отсутствие проверки входных данных в драйвере стало проблемой USB?

С двух статей. С той, что эта проверка головоломной помойки всех 100500 возможных дескрипторов, для которых размеры могут быть указаны в разных местах и противоречить друг-другу, причём всё будет по стандарту, а сам дескриптор может прилететь вообще третьего, вообще требуется на самом низком уровне протокола, ниже уже тупо железо, и с той что жопа может легко наступить ещё до того, как данные вообще дойдут до процессора.

Я на USB кучу собак сожрал и до сих пор иногда приходится. Кстати вот буквально на днях допилил и выложил свой libusb-wine для Wine >= 9.0, чтобы через wow64 без multilib работало.

Stanson ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)