// From DDKs to Bus Discipline Development Kits, or Why Aren't We Firewalling USB Again?
Most bus-facing kernel device drivers have a fairly straightforward (though not always simple) task: take unstructured data from the bus and marshall it into typed data structures before handing it off to the kernel. Yet for how straightforward this sounds, such device drivers remain fertile ground for vulnerabilities. I'll be presenting our work-in-progress bus driver development kit whose goal is to programmatically generate driver code directly from a description of the bus protocol written in a domain-specific language. In addition to code generation, we will be able to use the DSL description to create data structures and hooks to check semantic properties of the protocol not enforced by the syntactic rules. Finally, due to our choice of DSL, we will be able to verify that the parser does what we want it to do: that data coming in over the bus stays in the appropriate data structures and that those data structures conform to the rules of the protocol. As a proof of concept, we're developing a firewall for USB reminiscent of the Netfilter architecture.