[alsa-devel] [PATCH] ALSA: usb-audio: fix endianness bug in snd_nativeinstruments_*
Daniel Mack
zonque at gmail.com
Fri Apr 5 20:53:24 CEST 2013
Eldad Zack <eldad at fogrefinery.com> 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>
Acked-by: Daniel Mack <zonque at gmail.com>
Thanks for catching this!
Daniel
>---
> 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;
More information about the Alsa-devel
mailing list