[alsa-devel] [PATCH] ALSA: usb-audio: fix endianness bug in snd_nativeinstruments_*

Takashi Iwai tiwai at suse.de
Sun Apr 7 09:43:36 CEST 2013


At Fri,  5 Apr 2013 20:49:46 +0200,
Eldad Zack wrote:
> 
> The usb_control_msg() function expects __u16 types and performs
> the endianness conversions by itself.
> However, in three places, a conversion is performed before it is
> handed over to usb_control_msg(), which leads to a double conversion
> (= no conversion):
> * snd_usb_nativeinstruments_boot_quirk()
> * snd_nativeinstruments_control_get()
> * snd_nativeinstruments_control_put()
> 
> Caught by sparse:
> 
> sound/usb/mixer_quirks.c:512:38: warning: incorrect type in argument 6 (different base types)
> sound/usb/mixer_quirks.c:512:38:    expected unsigned short [unsigned] [usertype] index
> sound/usb/mixer_quirks.c:512:38:    got restricted __le16 [usertype] <noident>
> sound/usb/mixer_quirks.c:543:35: warning: incorrect type in argument 5 (different base types)
> sound/usb/mixer_quirks.c:543:35:    expected unsigned short [unsigned] [usertype] value
> sound/usb/mixer_quirks.c:543:35:    got restricted __le16 [usertype] <noident>
> sound/usb/mixer_quirks.c:543:56: warning: incorrect type in argument 6 (different base types)
> sound/usb/mixer_quirks.c:543:56:    expected unsigned short [unsigned] [usertype] index
> sound/usb/mixer_quirks.c:543:56:    got restricted __le16 [usertype] <noident>
> sound/usb/quirks.c:502:35: warning: incorrect type in argument 5 (different base types)
> sound/usb/quirks.c:502:35:    expected unsigned short [unsigned] [usertype] value
> sound/usb/quirks.c:502:35:    got restricted __le16 [usertype] <noident>
> 
> Signed-off-by: Eldad Zack <eldad at fogrefinery.com>

Thanks, applied to for-linus branch.


Takashi

> ---
>  sound/usb/mixer_quirks.c | 4 ++--
>  sound/usb/quirks.c       | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
> index 497d274..ebe9144 100644
> --- a/sound/usb/mixer_quirks.c
> +++ b/sound/usb/mixer_quirks.c
> @@ -509,7 +509,7 @@ static int snd_nativeinstruments_control_get(struct snd_kcontrol *kcontrol,
>  	else
>  		ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), bRequest,
>  				  USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
> -				  0, cpu_to_le16(wIndex),
> +				  0, wIndex,
>  				  &tmp, sizeof(tmp), 1000);
>  	up_read(&mixer->chip->shutdown_rwsem);
>  
> @@ -540,7 +540,7 @@ static int snd_nativeinstruments_control_put(struct snd_kcontrol *kcontrol,
>  	else
>  		ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), bRequest,
>  				  USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
> -				  cpu_to_le16(wValue), cpu_to_le16(wIndex),
> +				  wValue, wIndex,
>  				  NULL, 0, 1000);
>  	up_read(&mixer->chip->shutdown_rwsem);
>  
> diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
> index a2ac004..68e9220 100644
> --- a/sound/usb/quirks.c
> +++ b/sound/usb/quirks.c
> @@ -499,7 +499,7 @@ static int snd_usb_nativeinstruments_boot_quirk(struct usb_device *dev)
>  {
>  	int ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
>  				  0xaf, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
> -				  cpu_to_le16(1), 0, NULL, 0, 1000);
> +				  1, 0, NULL, 0, 1000);
>  
>  	if (ret < 0)
>  		return ret;
> -- 
> 1.8.1.5
> 


More information about the Alsa-devel mailing list