Local RedHat Enterprise Linux DoS â?? RHEL 7.1 Kernel crashes on invalid USB device descriptors (cypress_m8 driver)
The Kernel 3.10.0-229.20.1.el7.x86_64 crashes on presentation of a buggy USB device which requires the requiring the cypress_m8 driver. The bug was found using the USB-fuzzing framework vUSBf from Sergej Schumilo (github.com/schumilo) using the following device descriptor: [bLength: 0x12, bDescriptorType: 0x1, bcdUSB: 0x200, bDeviceClass: 0x3, bDeviceSubClass: 0x0, bDeviceProtocol: 0x0, bMaxPacketSize: 0x40, idVendor: 0x4b4, idProduct: 0x5500, bcdDevice: 0x100, iManufacturer: 0x1, iProduct: 0x2, iSerialNumbers: 0x3, bNumConfigurations: 0x1]. This is the configuration descriptor containing only one interrupt-endpoint-descriptor (IN-direction). The cypress_m8 driver assumes that there will be at least two endpoint-descriptors configured for interrupt-transfer and each used for one direction. Since there is no sanity check, it is possible that the kernel tries to dereference a null-pointer. This results in a crash of the system.