mirror of
https://github.com/torvalds/linux.git
synced 2026-06-10 15:42:19 +02:00
ALSA: usb-audio: fix endianness bug in snd_nativeinstruments_*
commit 889d66848b upstream.
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@fogrefinery.com>
Acked-by: Daniel Mack <zonque@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a7c079f995
commit
dd541ae5fb
|
|
@ -396,7 +396,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);
|
||||
|
||||
|
|
@ -427,7 +427,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);
|
||||
|
||||
|
|
|
|||
|
|
@ -486,7 +486,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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user