[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