From nobody Mon Jun 8 07:21:50 2026 Received: from mail-dl1-f47.google.com (mail-dl1-f47.google.com [74.125.82.47]) (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 E15D81A0BE0 for ; Mon, 1 Jun 2026 01:23:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780277027; cv=none; b=N9F0k5s+72nYI+g4udi30XVBCU+fQPhJsCO7lGUPRnr9oF4HTAutvBzyEYhVht60sCUKJgS42lQsn9Nfs2itoTPQho2EO0toygbyZvHdsmfm+8yl6oLKYArutYYkMjb0KjzVtoWZmWEQxdg99fgaBXzOdmb7ZOPY79pMniQ0s6w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780277027; c=relaxed/simple; bh=nJCgTMFiRgabN3an7EYZs+NWRtA61piWagt15POy5qI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=WNoubwJXQQUakMVYfMU6CjcPIlIPB/FxMMWaCPmRs6hHLcOCEveHAGpXWDONMc599HTawIU7lmlBl1NQwhHAyEp8ZKVLWTPD0ef8VLxezVgLXPbGr+j2AWxz2lMrSxuuzMEUaT2JjeVeSO0on7R3JFXlle1gOMuK4orRftl5w7I= 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=UMmiwYy1; arc=none smtp.client-ip=74.125.82.47 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="UMmiwYy1" Received: by mail-dl1-f47.google.com with SMTP id a92af1059eb24-137d464c47eso874098c88.1 for ; Sun, 31 May 2026 18:23:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780277025; x=1780881825; 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=uZcjgvZCvNpJWentv+qnXvtNSSU1VFpEqOO1EMSQO+g=; b=UMmiwYy1kFbeNWVquEy+PLlXRG0iOD7Me9bh/5UuEJXDIN3Nqmqj8/FPoI14Rg2sjo ExPaPLJoM5cWbsX217JMRQj9WjR7pdJt+MGbHnQHAocL9zmCQUxgYbBTZ53lo8hQoqe4 2nF4gIVEK9qAiLQTB1JneoaeL9l9obBlOy/VQbNHpLj/5015i2BT5uc10DQw5zf3u8QC uNNEQJl0xajlscF5Zp+QJJ0+2II9HyAmw7AjHePOmg4lL9MVtAipWPp5r+QBkZzBFXAU 0uiKrvOdBv/fmYqAnZ41K+hhS0I1T16kRnuxDpkODXAvSnPcFdEtCq5IJsKq38Kecm71 U4lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780277025; x=1780881825; 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=uZcjgvZCvNpJWentv+qnXvtNSSU1VFpEqOO1EMSQO+g=; b=NM/TT26HMXl4+1JitX0DQ+pnO6bLT6fLARFoiXiGtf06Sp8bTv3NSXncEw2D31PWxG Gc/sc3G1eQpNoxlm7pm/ItS4czzj+Vqc0qMhSyplGiJtPI64zpYIvHtpqVB+3b1vpvgr G/LA+98I5J+Oz8WiiR/9MBd+bNMa2zT3hNxa6V8Rs2d764i9ZIKX6YVZHTlPDAr0dLaJ F9QW8Yz49f3iKNCAyOi9it917MxF6AbbTfE6w4yHaLr20bhay8QY00KA3OU7aX5kPISX sQa7Xkeazfkj8aeBZHqWwm02zO4PCdgMBFqkLiKp1QnxP0WALo6/euuA7AWsmfYMzOoM CJSQ== X-Forwarded-Encrypted: i=1; AFNElJ+4eeILgVaor3BT4f95el3tqw3O61njTRIFSD1GHDkFzBEEfmx9XqJ0D4w4nvraWxxEC+GvHxgMQxbKqG0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7SZOmkETmu+Fw2aSH0W7dWrqsqfqlm2VCPcRn2br8PRNFUh1z y4ZET2JH4gi2CCPR8q/sscoJB8abL5RrZFSYljYXWwapie2SpUZ1NVaL X-Gm-Gg: Acq92OFDVKyJJK9rwOCyWMQBOirNIHNf3q8ziOOp/rh7YtoGzpzgxwxsMh36c5zDpxA Fvi7AgTytU4mvPi8//l4XLKcgXEl7SWQl7new1RpP0344ArGOIp1saT98cjEn0Cf/UtYn5yrhle d5B1bgi71Z/BmhMoLhth48S0kbHgnps5sMc9MKQqBBL7dwJjMtbe2ziifuonZD4adxkC3wjs6M+ DB0ckhQoQ2OOwL9czvYYt/Vulm9s3CWHnTb+wb1EdVERPzXzIkhSoN0kZWUSSfkW6m2lgUIyBEd dGaWKmq5OYx12kARhFDD/DiiI4P8xVmg1wnwongHtB+U4V0RBG6aiwmn18WtqJMAB0GBCAtXJRO 9qk8zbxB3m6IVPndyrpIVngQY7pHRhYMi6z6Ckf3fQWLX+1IfEL70bXV4bAV2GKonbEGw48B1Xk CSQ+ZqouEcFaXVCe91zKQnQBUcb+nQjE1W/69ABNy6xWKCSC7uUHa/CV4nzer9iumWLOq8nAcQq v4UUo0l2t82 X-Received: by 2002:a05:7022:6083:b0:12d:c9b6:bbe2 with SMTP id a92af1059eb24-137d43bbedfmr3995240c88.2.1780277024699; Sun, 31 May 2026 18:23:44 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-23.user3p.v-tal.net.br. [177.4.161.23]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-137b3c69bdfsm5835614c88.9.2026.05.31.18.23.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 31 May 2026 18:23:44 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Sun, 31 May 2026 22:23:35 -0300 Subject: [PATCH v2] ALSA: core: Use flexible array for card private data 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: <20260531-alsa-card-private-flex-array-v2-1-e4ff67f5bd23@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/32Nyw6CMBAAf4Xs2TVtSQU88R/Gw1IWqOGVLRIM4 d8FvXjyOMlkZoXA4jnANVpBePbBD/0O5hSBa6ivGX25MxhlLsrGGqkNhI6kxFH8TBNj1fKCJEI vNEnqbBGrTJODPTEKV3755G/3L4dn8WA3Hc3DqGTocGqE6Wdjsv+bWaPGOFFc2JSN1ZTXHfn27 IYOtu0NtBEJMNQAAAA= X-Change-ID: 20260531-alsa-card-private-flex-array-278c5b3091ac To: Takashi Iwai , Jaroslav Kysela Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, notify@kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2848; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=nJCgTMFiRgabN3an7EYZs+NWRtA61piWagt15POy5qI=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDFky9+UmmSyseMCpUGfbLDn9NKfTzeVqnIFf+RrLhQ4xP GQ2cfneUcrCIMbFICumyLI6aZHlnq4HV+vjVnjAzGFlAhnCwMUpABNx5mP4Z7+HY9nW1/ovps86 8+u979Kn5g/l5Vh3Vje9vrn6+esdznIM/yyUM9e4t7Dsyntdqu6wctqr0NTMKYnXl+1+yatppbB ZjAUA X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 snd_card_new() and snd_devm_card_new() allocate struct snd_card together with optional driver-private storage. The storage is currently described only by open-coded sizeof(*card) + extra_size arithmetic, and snd_card_init() reaches it by manually adding sizeof(struct snd_card) to the card pointer. Make the trailing storage explicit with a flexible array member. Use kzalloc_flex() for the regular allocation path and struct_size() for the devres allocation size. This documents the layout and avoids open-coded variable-size object arithmetic. Align the flexible array to unsigned long long so the driver-private area does not become less aligned than the old sizeof(struct snd_card) tail address on 32-bit ABIs. Signed-off-by: C=C3=A1ssio Gabriel --- Changes in v2: - Use kzalloc_flex() for the snd_card_new() allocation path. - Link to v1: https://patch.msgid.link/20260529-alsa-card-private-flex-arra= y-v1-1-370eb58e251a@gmail.com --- include/sound/core.h | 2 ++ sound/core/init.c | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/sound/core.h b/include/sound/core.h index 4093ec82a0a1..4bb76c21c956 100644 --- a/include/sound/core.h +++ b/include/sound/core.h @@ -148,6 +148,8 @@ struct snd_card { struct snd_mixer_oss *mixer_oss; int mixer_oss_change_count; #endif + + unsigned char private_data_area[] __aligned(__alignof__(unsigned long lon= g)); }; =20 #define dev_to_snd_card(p) container_of(p, struct snd_card, card_dev) diff --git a/sound/core/init.c b/sound/core/init.c index 0c316189e947..2408160b8ea1 100644 --- a/sound/core/init.c +++ b/sound/core/init.c @@ -181,7 +181,7 @@ int snd_card_new(struct device *parent, int idx, const = char *xid, =20 if (extra_size < 0) extra_size =3D 0; - card =3D kzalloc(sizeof(*card) + extra_size, GFP_KERNEL); + card =3D kzalloc_flex(*card, private_data_area, extra_size); if (!card) return -ENOMEM; =20 @@ -232,7 +232,8 @@ int snd_devm_card_new(struct device *parent, int idx, c= onst char *xid, int err; =20 *card_ret =3D NULL; - card =3D devres_alloc(__snd_card_release, sizeof(*card) + extra_size, + card =3D devres_alloc(__snd_card_release, + struct_size(card, private_data_area, extra_size), GFP_KERNEL); if (!card) return -ENOMEM; @@ -280,7 +281,7 @@ static int snd_card_init(struct snd_card *card, struct = device *parent, int err; =20 if (extra_size > 0) - card->private_data =3D (char *)card + sizeof(struct snd_card); + card->private_data =3D card->private_data_area; if (xid) strscpy(card->id, xid, sizeof(card->id)); err =3D 0; --- base-commit: 5fa82dd6492e9ac3ab27d2c15d73b601b4e6a87d change-id: 20260531-alsa-card-private-flex-array-278c5b3091ac Best regards, -- =20 C=C3=A1ssio Gabriel