[RFC PATCH 04/11] ALSA: mixer_audient: Add length check to USB transfer
From: Christian Ruppert
Date: Sat Oct 31 2026 - 20:04:44 EST
Check USB control transfers not only for errors but also for expected
length and return -EIO in case of error.
Signed-off-by: Christian Ruppert <arc@xxxxxx>
---
sound/usb/mixer_audient.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/sound/usb/mixer_audient.c b/sound/usb/mixer_audient.c
index 82591c32140f..24d2f7a0bdc2 100644
--- a/sound/usb/mixer_audient.c
+++ b/sound/usb/mixer_audient.c
@@ -244,9 +244,14 @@ static inline int snd_audient_get_cur(struct usb_mixer_interface *mixer,
const u16 value = U8_U8(sel, cidx);
const u16 index = U8_U8(unit, mixer->hostif->desc.bInterfaceNumber);
- return snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
- UAC2_CS_CUR, AUDIENT_REQTYPE_GET,
- value, index, buf, len);
+ const int ret = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
+ UAC2_CS_CUR, AUDIENT_REQTYPE_GET,
+ value, index, buf, len);
+
+ if ((ret >= 0) && (ret != len))
+ return -EIO;
+
+ return ret;
}
static inline int snd_audient_set_cur(struct usb_mixer_interface *mixer,
@@ -258,9 +263,14 @@ static inline int snd_audient_set_cur(struct usb_mixer_interface *mixer,
const u16 value = U8_U8(sel, cidx);
const u16 index = U8_U8(unit, mixer->hostif->desc.bInterfaceNumber);
- return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
- UAC2_CS_CUR, AUDIENT_REQTYPE_SET,
- value, index, buf, len);
+ const int ret = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
+ UAC2_CS_CUR, AUDIENT_REQTYPE_SET,
+ value, index, buf, len);
+
+ if ((ret >= 0) && (ret != len))
+ return -EIO;
+
+ return ret;
}
--
2.56.0