Доступний USB Raw Gadget, Linux-модуль для емуляції USB-пристроїв

Андрій Коновалов із компанії Google розвиває новий модуль Сирий пристрій USB, дозволяє емулювати USB-пристрою в просторі користувача. Знаходиться на розгляді заявка на включення цього модуля до основного складу ядра Linux. USB Raw Gadget вже застосовується у компанії Google для спрощення fuzzing-тестування USB-стеку ядра за допомогою інструментарію syzkaller.

Модуль додає новий програмний інтерфейс у підсистему ядра USB Gadget і розвивається як альтернатива GadgetFS. Створення нового API зумовлене необхідністю отримання низькорівневого та прямого доступу до підсистеми USB Gadget із простору користувача, що дозволяє обробляти всі можливі USB-запити (GadgetFS обробляє деякі запити самостійно, не передаючи у простір користувача). Управління USB Raw Gadget здійснюється через пристрій /dev/raw-gadget за аналогією з /dev/gadget у GadgetFS, але для взаємодії застосовується інтерфейс на основі ioctl(), а не псевдо-ФС.

Крім прямої обробки всіх USB-запитів процесом у просторі користувача новий інтерфейс також відрізняється можливістю повернення будь-яких даних у відповідь на USB-запит (GadgetFS виконує перевірку коректності USB-дескрипторів та фільтрує певні відповіді, що заважає виявленню помилок при fuzzing-тестуванні USB-стеку) . Raw Gadget також дозволяє вибрати конкретний пристрій UDC (USB Device Controller) і драйвер для прикріплення, в той час як GadgetFS прикріплюється до першого доступного пристрою UDC. Для різних UDC призначаються передбачувані імена кінцева точка розділення різних типів каналів обміну даними всередині одного пристрою.

Джерело: opennet.ru

Додати коментар або відгук