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

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

 



Eldad Zack <eldad@xxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx>

Acked-by: Daniel Mack <zonque@xxxxxxxxx>

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;


_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel




[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux