Patch "ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
alsa-usb-audio-fix-uac2-get_ctl-request-with-a-range-attribute.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
447cae58cecd69392b74a4a42cd0ab9cabd816afMon Sep 17 00:00:00 2001
From: Kirill Marinushkin <[email protected]>
Date: Mon, 29 Jan 2018 06:37:55 +0100
Subject: ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute
From: Kirill Marinushkin <[email protected]>
commit 447cae58cecd69392b74a4a42cd0ab9cabd816af upstream.
The layout of the UAC2 Control request and response varies depending on the request type. With the current implementation, only the Layout 2 Parameter Block (with the 2-byte sized RANGE attribute) is handled properly. For the Control requests with the 1-byte sized RANGE attribute (Bass Control, Mid Control, Tremble Control), the response is parsed incorrectly.
This commit:
* fixes the wLength field value in the request
* fixes parsing the range values from the response
--- sound/usb/mixer.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)
sound/usb/mixer.c +11 -7
@@ -344,17 +344,20 @@ static int get_ctl_value_v2(struct usb_m int validx, int *value_ret) { struct snd_usb_audio *chip = cval->head.mixer->chip; -unsigned char buf[4 +3 *sizeof (__u32)];/* enough space for one range */ +/* enough space for one range */ +unsigned char buf[sizeof (__u16) +3 *sizeof (__u32)];unsigned char *val; -int idx =0 , ret, size; +int idx =0 , ret, val_size, size;__u8 bRequest; + val_size =uac2_ctl_value_size (cval->val_type); +if (request ==UAC_GET_CUR ) { bRequest =UAC2_CS_CUR ; - size =uac2_ctl_value_size (cval->val_type); + size = val_size; }else { bRequest =UAC2_CS_RANGE ; - size =sizeof (buf); + size =sizeof (__u16) +3 * val_size; }memset (buf,0 ,sizeof (buf));
@@ -387,16 +390,17 @@ error: val = buf +sizeof (__u16);break ;case UAC_GET_MAX : - val = buf +sizeof (__u16) *2 ; + val = buf +sizeof (__u16) + val_size;break ;case UAC_GET_RES : - val = buf +sizeof (__u16) *3 ; + val = buf +sizeof (__u16) + val_size *2 ;break ;default :return -EINVAL ; } - *value_ret =convert_signed_value (cval,snd_usb_combine_bytes (val,sizeof (__u16))); + *value_ret =convert_signed_value (cval, +snd_usb_combine_bytes (val, val_size));return 0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/alsa-usb-audio-fix-uac2-get_ctl-request-with-a-range-attribute.patch