I don't see how info's owner field relates to kcontrol's count field. It should assign to info's count instead.
Let's assume this scenario:
1. user reads the control element from kernel (the owner field is set) 2. user changes some values 3. user issues 'SNDRV_CTL_IOCTL_ELEM_REPLACE' ioctl.
With the original code, 'kctl' here gets a large count number due to its non-empty owner field. Therefore it fails on subsequent call snd_ctl_new().
This patch fixes this issue.
Signed-off-by: Lu Guanqun guanqun.lu@intel.com --- sound/core/control.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/sound/core/control.c b/sound/core/control.c index 98b7fc7..30e1483 100644 --- a/sound/core/control.c +++ b/sound/core/control.c @@ -1099,7 +1099,7 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file, if (err < 0) return err; memcpy(&kctl.id, &info->id, sizeof(info->id)); - kctl.count = info->owner ? info->owner : 1; + kctl.count = info->count; access |= SNDRV_CTL_ELEM_ACCESS_USER; kctl.info = snd_ctl_elem_user_info; if (access & SNDRV_CTL_ELEM_ACCESS_READ)