Re: [PATCH RESEND v4 2/2] ALSA: control: add ioctl to retrieve full card components
Jaroslav Kysela <[email protected]> Thu, 25 Jun 2026 14:40:36 +0200
| Newsgroups | org.alsa-project.alsa-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
On 6/25/26 14:07, Maciej Strozek wrote:
...
> +struct snd_ctl_card_bytes {
> + unsigned int type; /* SND_CTL_CARD_BTYPE_* */
> + unsigned int data_allocated; /* size of @data buffer in bytes */
> + unsigned int data_len; /* in/out: actual data length in bytes */
> + unsigned char *data; /* user buffer */
I know that I suggested to add code to the compat layer. But it seems that new
UAPIs are using just '__u64 data' here with padding to 8 bytes (I would add
new reserved field and perhaps we may use force `__u32' type for all other
fields). The code in kernel sound translate the u64 data to pointer using
u64_to_user_ptr() function.
So like:
struct snd_ctl_card_bytes {
__u32 type;
__u32 data_allocated;
__u32 data_len;
__u32 reserved; /* explicit pad */
__u64 data; /* pointer as __u64 */
};
> +static int snd_ctl_card_bytes(struct snd_card *card,
> + struct snd_ctl_card_bytes *info,
> + unsigned int __user *data_len_out)
> +{
> + unsigned int data_len;
> +
> + switch (info->type) {
> + case SND_CTL_CARD_BTYPE_COMPONENTS:
> + scoped_guard(rwsem_read, &snd_ioctl_rwsem) {
> + data_len = strlen(card->components) + 1;
The field card->components may be NULL here, also fix other uses like in
snd_ctl_card_info().
Thank you,
Jaroslav
--
Jaroslav Kysela <[email protected]>
Linux Sound Maintainer; ALSA Project; Red Hat