From nobody Tue Apr 7 09:18:44 2026 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 893EB237713 for ; Sat, 14 Mar 2026 03:35:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773459306; cv=none; b=YLX7Dw/ot0skGXNxnemBXW5Xo3jQt6r3MVmxn+xGIYth/BEDaMUHBoXEvSbgFyyWBh0PeNtPcEX+YkmEoWoj0PL2X8x1c6QrNjVBjRGjSCaUy5qGC+e2ZKD5+borPbANN8U6scpPIUla8FqrBRWnfTCaeuZMh+sYJkXjVCzSQb0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773459306; c=relaxed/simple; bh=bCPDrfSIHgTotXmiaMzTBzeP1LSsPbI6BJ3CRFCDXwU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=eRH9vDmCOpRWDb1kzfi/yh0QVDFV9lcKHkH/lCEXjyjOtBZkW9+C3o8RT77T2TmIKMgq9LAEsVGkvtGoIxzYK0ZJ3/uLLlqNOHePJ5FJl3eXfuwT5unk2dpDJktHbkd7qI8PimP6kr4gVH6QFFpFRARgbQaMp03lk3RLLQDFCvU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RYUlaAV0; arc=none smtp.client-ip=74.125.82.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RYUlaAV0" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-2be19f05d7dso2385498eec.1 for ; Fri, 13 Mar 2026 20:35:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773459305; x=1774064105; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=JqNMCmmqJDcsaA0VdbH9eNtu9b3dBl63iWS6KS2e2D0=; b=RYUlaAV0bMpoTf486ZptLYTUHpWlSDRqTGG7OYYARYGBOt18DM/swXDxssmRPA/oww 6NdAI99kMM3iRFbh3jMRG23HqMA7MhT6LaDpDnTD5iC8+w8vlZTTphgd2f/IT6fgXadc YGnTiPwVWr/3pJ4ovVan67CErLM+ZUq7iR4KexdmEy04VQq+VWJ6Dg+fK94Dow3FHfhc 5Weug4HkLu14AHEu5dRtsnCTH9muUhkiMUzQJf5+HSg03LkIog9VRh2IlTz3bcS4+DA1 rNsCv/NUTZMBpBpsY/DC5NbxiN2muKR1EOKBMWaBjd6dxGltzN60X7zXrQ+NlfaMtgit /Qdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773459305; x=1774064105; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=JqNMCmmqJDcsaA0VdbH9eNtu9b3dBl63iWS6KS2e2D0=; b=TMpTNRg6kE4311T5HJXznX/u2z6SiIExUO3hm1VyUd0R4nEYP1eSBGdo8uZW2LcAmA ayATVfdeyojZjCxP19metnrtZ6Wfh3lXf6C4c87arO/lRcZwXbqg7ibyPYl7erZiiamH 7J7PyhVKG0a0UDNXP+E1Hs2yNNu6ThVRIP4iNcVxAwOoKiUsnW7cIrIOqG0ixxuMElj8 ce9E9Jy7wWB4EDD+2tyL9m4A0keNfkpNNuppStYj/OFRkCpXSO7zmiVBwPly9luVFlwU mx+OJ5/1YpWp64ROarnfgpfF26Om9FuMykjDU6Gaz1cNp28n4q08ZExFdTXiL99XwYpa 3Ifw== X-Forwarded-Encrypted: i=1; AJvYcCVj36HlVGRtkv7s7dqxyJSi61UPergxcnznTdRtc7ph4sAA6sUY4qCseBcxEpfeeVGWTZJ3k6BDBxwWwFM=@vger.kernel.org X-Gm-Message-State: AOJu0Yzr5BbdWBhbCCsLny/bZvtXOZyRS6C+KqBVR0vm/+NmYNr/9yrw rcYJlO6i9KTXlx+sphubR/m6xOE8hC7aa9STvLtKMJZPscp1dIrW6y7f X-Gm-Gg: ATEYQzxv5ubtCqN7SBL4MRAmB5MZsxKBcKwzIoG384c1FnpJwQffQx2eTGp+etCvkSE Bb7dFMxwb6Fx5r+nBanpynIHUB20yN4SCcH+4SC+elOQBvTg/8U3Q7NIOQKwKCV5qC1IlbOlvyQ +cjMw/fqvGDWoiQ6FH8WNK8NCzh8YcAqIjEcqvTgZFVUb01PJRN0fWfS8HhtxzrI/5ZTk69UrKW Vhj315AubzyY3bfhaMZc1Wj7ZWm9pOjnQzRWQc2F94Ri4PXTaW0Uo7atIL+pLzhSxQ8k2x1av9R h+dEk/eV3rsqbfV840uP9icx9cuNTNx61kugGlJEtXHRLt/eDTBgSSQ8SFZGMB7w8/DIsyTY2ZC NmmQTbdxn/diWkuov5lojkUo3bXMQB3+VZSg1fjqhuHv+MuCGYIxxMYPDE4vBDVxBxAXHCTPhdp NDCOJFLnIegtPD5dTR96leJWtSYRyb2IoKODmArtHUBLui6w7SZmYjX39gXr0PkdBtHBGt7N2FK /BBPynxQFj2BjQ= X-Received: by 2002:a05:693c:3618:b0:2b6:aeb8:3d8c with SMTP id 5a478bee46e88-2bea55b2a69mr2536272eec.32.1773459304431; Fri, 13 Mar 2026 20:35:04 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-109.user3p.v-tal.net.br. [177.4.161.109]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2beab5702e5sm5917833eec.29.2026.03.13.20.35.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 20:35:03 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Sat, 14 Mar 2026 00:34:46 -0300 Subject: [PATCH] ALSA: usb-audio: validate full match when resolving quirk aliases Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260314-alsa-usb-fix-quirk-alias-v1-1-3269998f7ada@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/x2M3QpAQBBGX0VzbWrZEl5FLgaDifzstFLy7iaX5 +t85wHlIKxQJw8EvkRl3wyyNIF+pm1ilMEYcpcXzmceaVXCqB2OcuMZJSw2CSly1ZfeuY5KX4D dj8Cm/Ommfd8PW9tq8GoAAAA= X-Change-ID: 20260313-alsa-usb-fix-quirk-alias-e9c8300ba836 To: Takashi Iwai Cc: Jaroslav Kysela , Mark Brown , Greg Kroah-Hartman , linux-sound@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2575; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=bCPDrfSIHgTotXmiaMzTBzeP1LSsPbI6BJ3CRFCDXwU=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDJlbrqdu/3TEWDb21XOHnc5MfF2fPGX9V3vZNt1RzJ3Vn fLv93HjjlIWBjEuBlkxRZbVSYss93Q9uFoft8IDZg4rE8gQBi5OAZjIVU+Gv2KRrqb5Mhzfrl9x OiLTfmbFH4VNz7+deTk7qGrR/zDL9omMDEvVb5QoJvoFJUu6rew57WEq55OQrLZH1DhC5NxC++5 bHAA= X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 get_alias_quirk() resolves a quirk for an aliased USB ID by scanning usb_audio_ids[], but it currently checks only the vendor/product pair. This can make an aliased ID pick the first entry with a matching vid:pid even when that entry also depends on interface descriptor fields that do not match the actual device or interface. Fix it by re-checking each aliased candidate with usb_match_one_id() against the real interface before returning the quirk. Signed-off-by: C=C3=A1ssio Gabriel --- sound/usb/card.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/sound/usb/card.c b/sound/usb/card.c index 270dad84d825..ff4418017763 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -870,17 +870,28 @@ static void find_last_interface(struct snd_usb_audio = *chip) =20 /* look for the corresponding quirk */ static const struct snd_usb_audio_quirk * -get_alias_quirk(struct usb_device *dev, unsigned int id) +get_alias_quirk(struct usb_interface *intf, unsigned int id) { const struct usb_device_id *p; + struct usb_device_id id_alias; =20 for (p =3D usb_audio_ids; p->match_flags; p++) { - /* FIXME: this checks only vendor:product pair in the list */ if ((p->match_flags & USB_DEVICE_ID_MATCH_DEVICE) =3D=3D USB_DEVICE_ID_MATCH_DEVICE && p->idVendor =3D=3D USB_ID_VENDOR(id) && - p->idProduct =3D=3D USB_ID_PRODUCT(id)) - return (const struct snd_usb_audio_quirk *)p->driver_info; + p->idProduct =3D=3D USB_ID_PRODUCT(id)) { + /* + * Re-check the aliased entry against the actual + * interface descriptors instead of matching only + * the vendor/product pair. + */ + id_alias =3D *p; + id_alias.idVendor =3D USB_ID_VENDOR(id); + id_alias.idProduct =3D USB_ID_PRODUCT(id); + + if (usb_match_one_id(intf, &id_alias)) + return (const struct snd_usb_audio_quirk *)p->driver_info; + } } =20 return NULL; @@ -931,7 +942,7 @@ static int usb_audio_probe(struct usb_interface *intf, id =3D USB_ID(le16_to_cpu(dev->descriptor.idVendor), le16_to_cpu(dev->descriptor.idProduct)); if (get_alias_id(dev, &id)) - quirk =3D get_alias_quirk(dev, id); + quirk =3D get_alias_quirk(intf, id); if (quirk && quirk->ifnum >=3D 0 && ifnum !=3D quirk->ifnum) return -ENXIO; if (quirk && quirk->ifnum =3D=3D QUIRK_NODEV_INTERFACE) --- base-commit: 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681 change-id: 20260313-alsa-usb-fix-quirk-alias-e9c8300ba836 Best regards, --=20 C=C3=A1ssio Gabriel