Takashi Iwai d3ecfd
From 60081b35c68ba6a466dee08de581be06999c930a Mon Sep 17 00:00:00 2001
Takashi Iwai d3ecfd
From: Takashi Iwai <tiwai@suse.de>
Takashi Iwai d3ecfd
Date: Thu, 13 Feb 2020 12:20:59 +0100
Takashi Iwai d3ecfd
Subject: [PATCH] ALSA: usb-audio: Parse source ID of UAC2 effect unit
Takashi Iwai d3ecfd
Git-commit: 60081b35c68ba6a466dee08de581be06999c930a
Takashi Iwai d3ecfd
Patch-mainline: v5.7-rc1
Takashi Iwai d3ecfd
References: bsc#1051510
Takashi Iwai d3ecfd
Takashi Iwai d3ecfd
During parsing the input source, we currently cut off at the Effect
Takashi Iwai d3ecfd
Unit node without parsing further its source id.  It's no big problem,
Takashi Iwai d3ecfd
so far, but it should be more consistent to parse it properly.
Takashi Iwai d3ecfd
Takashi Iwai d3ecfd
This patch adds the recursive parsing in parse_term_effect_unit().
Takashi Iwai d3ecfd
It doesn't add anything in the audio unit parser itself, and the
Takashi Iwai d3ecfd
effect unit itself is still skipped, though.
Takashi Iwai d3ecfd
Takashi Iwai d3ecfd
Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=206147
Takashi Iwai d3ecfd
Link: https://lore.kernel.org/r/20200213112059.18745-3-tiwai@suse.de
Takashi Iwai d3ecfd
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai d3ecfd
Takashi Iwai d3ecfd
---
Takashi Iwai d3ecfd
 sound/usb/mixer.c | 6 ++++++
Takashi Iwai d3ecfd
 1 file changed, 6 insertions(+)
Takashi Iwai d3ecfd
Takashi Iwai d3ecfd
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
Takashi Iwai d3ecfd
index 81b2db0edd5f..56d0878e4999 100644
Takashi Iwai d3ecfd
--- a/sound/usb/mixer.c
Takashi Iwai d3ecfd
+++ b/sound/usb/mixer.c
Takashi Iwai d3ecfd
@@ -901,6 +901,12 @@ static int parse_term_effect_unit(struct mixer_build *state,
Takashi Iwai d3ecfd
 				  struct usb_audio_term *term,
Takashi Iwai d3ecfd
 				  void *p1, int id)
Takashi Iwai d3ecfd
 {
Takashi Iwai d3ecfd
+	struct uac2_effect_unit_descriptor *d = p1;
Takashi Iwai d3ecfd
+	int err;
Takashi Iwai d3ecfd
+
Takashi Iwai d3ecfd
+	err = __check_input_term(state, d->bSourceID, term);
Takashi Iwai d3ecfd
+	if (err < 0)
Takashi Iwai d3ecfd
+		return err;
Takashi Iwai d3ecfd
 	term->type = UAC3_EFFECT_UNIT << 16; /* virtual type */
Takashi Iwai d3ecfd
 	term->id = id;
Takashi Iwai d3ecfd
 	return 0;
Takashi Iwai d3ecfd
-- 
Takashi Iwai d3ecfd
2.16.4
Takashi Iwai d3ecfd