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



Предыдущая | Следующая

Андрей Коновалов из компании Google развивает новый модуль USB Raw Gadgetпозволяющий эмулировать 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 назначаются предсказуемые имена endpoint для разделения разных типов каналов обмена данными внутри одного устройства.