On Mon, Feb 13, 2023 at 06:07:14PM +0900, Yuta Hayama wrote: > 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: Yuta Hayama <hayama@xxxxxxxxxxx> > --- > drivers/usb/gadget/function/f_fs.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c > index 8ad354741380..9a1bd6fb5744 100644 > --- a/drivers/usb/gadget/function/f_fs.c > +++ b/drivers/usb/gadget/function/f_fs.c > @@ -2292,8 +2292,12 @@ static int __ffs_do_os_desc_header(enum ffs_os_desc_type *next_type, > u16 bcd_version = le16_to_cpu(desc->bcdVersion); > u16 w_index = le16_to_cpu(desc->wIndex); > > - if (bcd_version != 1) { > - pr_vdebug("unsupported os descriptors version: %d", > + if (bcd_version == 0x1) { > + pr_vdebug("bcdVersion is expected to be 0x100, but it was 0x%x. ", > + "Pass for compatibility, but fix your user space driver.\n", > + bcd_version); No one will see a debug message :( Make this a much louder warning please. thanks, greg k-h