On Fri, Apr 27, 2018 at 01:06:49PM +0300, Аладышев Константин wrote:
> Ok, I’ve finally got it working!
> 
> As I said earlier, this keyboard has interrupt endpoint size = 32 bytes. 
> SeaBIOS doesn’t allow it ("usb_kbd_setup" function checks for 
> “(epdesc->wMaxPacketSize != 8)").
> 
> But this fix is not enough, cause “ehci_poll_intr(struct usb_pipe *p, void 
> *data)” use unsafe “memcpy_far” for data with size of “maxpacket”. So if 
> maxpacket is 32, there will be 32 bytes copied. But “usb_check_key”  function 
> use “keyevent” structure address as data parameter for “ehci_poll_intr” 
> function. And the size of this structure is only 8 bytes, so this will lead 
> to memory corruption.
> 
> If we look at "Device Class Definition for Human Interface Devices (HID)" 
> specification (http://www.usb.org/developers/hidpage/HID1_11.pdf - Appendix 
> B: Boot Interface Descriptors – page 59):
> 
> “The HID Subclass 1 defines two descriptors for Boot Devices. Devices may 
> append additional data to these boot reports, but the first 8 bytes of 
> keyboard reports and the first 3 bytes of mouse reports must conform to the 
> format defined by the Boot Report descriptor in order for the data to be 
> correctly interpreted by the BIOS. The report may not exceed 8 bytes in 
> length. The BIOS will ignore any extensions to reports. These descriptors 
> describe reports that the BIOS expects to see.”
> 
> This is a little ambiguous for me how “Devices may append additional data” 
> but “The report may not exceed 8 bytes in length” (maybe I misunderstand “may 
> not” in second sentence), but it looks like it is SeaBIOS responsibility to 
> “ignore any extensions to reports”. What do you think?

It sounds like the device is out of spec.  But, I don't think there's
any harm in supporting it.

I guess we could add a "datasize" parameter to usb_poll_intr() so that
only the requested amount of data is transferred.

-Kevin

_______________________________________________
SeaBIOS mailing list
[email protected]
https://mail.coreboot.org/mailman/listinfo/seabios

Reply via email to