Andrei Konovalov da Google está desenvolvendo um novo módulo , emular dispositivos USB no espaço do usuário. Está em revisão para inclusão deste módulo no núcleo principal do Linux. O USB Raw Gadget já foi utilizado na Google para simplificar os testes de fuzzing da pilha USB do núcleo através de ferramentas .
O módulo adiciona uma nova interface de programação à subsistema do núcleo e é desenvolvido como uma alternativa ao GadgetFS. A criação de uma nova API se deve à necessidade de acesso de baixo nível e direto ao subsistema USB Gadget do espaço do usuário, permitindo o processamento de todas as possíveis solicitações USB (o GadgetFS processa algumas solicitações por conta própria, não as passando para o espaço do usuário). O controle do USB Raw Gadget é feito através do dispositivo /dev/raw-gadget, assim como em /dev/gadget no GadgetFS, mas para interação utiliza-se uma interface baseada em ioctl(), em vez de um sistema de arquivos pseudo.
Além do processamento direto de todas as solicitações USB pelo processo no espaço do usuário, a nova interface também se destaca pela capacidade de retornar qualquer dado em resposta a uma solicitação USB (o GadgetFS realiza a verificação da validade dos descritores USB e filtra certas respostas, o que dificulta a identificação de erros nos testes de fuzzing da pilha USB). O Raw Gadget também permite a seleção de um dispositivo UDC (Controlador de Dispositivo USB) específico e driver para anexar, enquanto o GadgetFS se conecta ao primeiro dispositivo UDC disponível. Para diferentes UDC, nomes predefinidos são atribuídos para diferenciar os diferentes tipos de canais de troca de dados dentro de um dispositivo.
Fonte: opennet.ru
