From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBCC3C2B9F4 for ; Tue, 22 Jun 2021 08:13:08 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 52E4061353 for ; Tue, 22 Jun 2021 08:13:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 52E4061353 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id A19C31672; Tue, 22 Jun 2021 10:12:15 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz A19C31672 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1624349585; bh=LLbiACnhFwi6KJ3H/3go9EYtr1LaccbAU0V0NMR4UuQ=; h=Date:From:To:Subject:In-Reply-To:References:Cc:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=AZl5SLmhGAVMnlVkJ4CNomFecXMWhSgsPfFjLGL6+901LpmXW8WiMQImiZTRAxgoh GQtnwuLNATJBmXNhxQsNU3NdgytanPIBBEyX1L0PU1RhzaeZA6r4jMaHIXiBLDHZXR Mkwz6WMGQNqjUjBZgVrqfkaxdCF4t2zIfsVr6UzM= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 38C98F8025F; Tue, 22 Jun 2021 10:12:15 +0200 (CEST) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 46C26F8026A; Tue, 22 Jun 2021 10:12:13 +0200 (CEST) Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 0C8FEF80161 for ; Tue, 22 Jun 2021 10:12:06 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 0C8FEF80161 Authentication-Results: alsa1.perex.cz; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="IHrYrfrJ"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="xDySg9dH" Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id 925C81FD5E; Tue, 22 Jun 2021 08:12:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1624349526; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=EWGuQOQDkY1hR5nqjk67zxZ5Qz9LoE8p37sHftGG314=; b=IHrYrfrJgyraeV7tiaCsFqP9j+nMVFX+bHDTWt6a2RQLfhA4lYdVm2f3V5uB5iNhCJj6zM JDRfP5Zr4dtFidqIf36ukgG05705bZCxNAkUHxhzj8Vpv5P5kzaJqjatdmAobRMf6Ibvm+ QnHjBsuUafzxq1sbgnzzZI7spYihD5s= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1624349526; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=EWGuQOQDkY1hR5nqjk67zxZ5Qz9LoE8p37sHftGG314=; b=xDySg9dH0qI3mj/ONoSfCuRUXh/kC14FN+6JD5+La+S0nW+O6Nm0+Tr3yD7lvpp8GNAM4b OViXLyESK1UbHPCw== Received: from alsa1.suse.de (alsa1.suse.de [10.160.4.42]) by relay2.suse.de (Postfix) with ESMTP id 83DA4A3B90; Tue, 22 Jun 2021 08:12:06 +0000 (UTC) Date: Tue, 22 Jun 2021 10:12:06 +0200 Message-ID: From: Takashi Iwai To: "Geoffrey D. Bennett" Subject: Re: [PATCH 16/31] ALSA: usb-audio: scarlett2: Add Gen 3 mixer support In-Reply-To: References: <0b00f3a5-fe31-0ad5-c723-d354dc724e58@gmail.com> <20210622074454.GB13614@m.b4.vu> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/25.3 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Cc: Hin-Tak Leung , alsa-devel@alsa-project.org, Vladimir Sadovnikov X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" On Tue, 22 Jun 2021 09:58:27 +0200, Takashi Iwai wrote: > > On Tue, 22 Jun 2021 09:44:54 +0200, > Geoffrey D. Bennett wrote: > > > > On Tue, Jun 22, 2021 at 09:34:25AM +0200, Takashi Iwai wrote: > > > On Tue, 22 Jun 2021 09:07:20 +0200, > > > Vladimir Sadovnikov wrote: > > > > > > > > Hello Takashi! > > > > > > > > Since Focusrite devices are too advanced in settings, the overall > > > > amount of 256 controls is not enough for these devices (like 18i20). > > > > I would like also to extend this constant up to 1024 or even more > > > > since adding support of software configuration of the device also > > > > can exceed the amount of 512 control elements. > > > > > > This define isn't for the total number of mixer elements. Instead, > > > it's just a size of the bitmap table that contains the head of the > > > linked list for each unit id (in the sense of USB mixer spec). > > > So the number of mixer elements is unlimited. > > > > Sorry I don't understand what's going on then. Am I calling > > snd_usb_mixer_add_control() wrong? Because when I called it more than > > MAX_ID_ELEMS times I got a buffer overflow in mixer->id_elems[] (from > > memory, I can confirm tonight). > > > > snd_usb_create_mixer() has: > > > > mixer->id_elems = kcalloc(MAX_ID_ELEMS, sizeof(*mixer->id_elems), > > GFP_KERNEL); > > > > snd_usb_mixer_add_control() called from mixer_scarlett_gen2.c ends up > > at snd_usb_mixer_add_list() which does: > > > > list->next_id_elem = mixer->id_elems[list->id]; > > mixer->id_elems[list->id] = list; > > > > And list->id was going over MAX_ID_ELEMS. > > Here, list->id is the *USB* mixer unit id, not the ALSA control id or > whatever the internal index. The former should be a byte, hence it > can't be over 256. > > That said, the scarlett2 code calls the function in a wrong way. It > has worked casually, so far, just because the core code doesn't use > the unit id number for significant roles. ... and looking again at the code, actually it does matter. The USB audio mixer code calls the resume for each mixer element, and the default resume code (default_mixer_resume()) is applied for a control with usb_mixer_elem_info.val_type == USB_MIXER_BOOLEAN and channels == 1. It seems that scarlett2 has some of them, and the resume procedure is applied wrongly with an invalid unit id. We need to define a special mixer value type (e.g. USB_MIXER_VENDOR), and use this for the all scarlett2 mixer elements, in addition to the below: > So, as a quick workaround, simply pass 0 or any fixed number under 256 > to list->id (i.e. elem->head.id in scarlett2_add_new_ctl()). That's > all, and the elements are chained in the linked list. Takashi