Re: [RFC PATCH] usb: gadget: f_fs: Fix incorrect version checking of OS descs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux