• Yuta Hayama's avatar
    usb: gadget: f_fs: Fix incorrect version checking of OS descs · 180bb831
    Yuta Hayama authored
    Currently, the USB gadget framework supports only version 1.0 of the MS OS
    descriptor. OS desc has a field bcdVersion indicating its version, with
    v1.0 represented by the value 0x100. However, __ffs_do_os_desc_header()
    was expecting the incorrect value 0x1, so allow the correct value 0x100.
    
    The bcdVersion field of the descriptor that is actually sent to the host
    is set by composite_setup() (in composite.c) to the fixed value 0x100.
    Therefore, it can be understood that __ffs_do_os_desc_header() is only
    performing a format check of the OS desc passed to functionfs. If a value
    other than 0x100 is accepted, there is no effect on communication over
    the USB bus. Indeed, until now __ffs_do_os_desc_header() has only accepted
    the incorrect value 0x1, but there was no problem with the communication
    over the USB bus.
    
    However, this can be confusing for functionfs userspace drivers. Since
    bcdVersion=0x100 is used in actual communication, functionfs should accept
    the value 0x100.
    
    Note that the correct value for bcdVersion in OS desc v1.0 is 0x100, but
    to avoid breaking old userspace drivers, the value 0x1 is also accepted as
    an exception. At this time, a message is output to notify the user to fix
    the userspace driver.
    Signed-off-by: default avatarYuta Hayama <hayama@lineo.co.jp>
    Reviewed-by: default avatarAndrzej Pietrasiewicz <andrzej.p@collabora.com>
    Link: https://lore.kernel.org/r/290f96db-1877-5137-373a-318e7b4f2dde@lineo.co.jpSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    180bb831
f_fs.c 90.8 KB