sound: snd_ctl_remove_user_ctl: prevent removal of kernel controls
Clemens Ladisch [Mon, 17 Aug 2009 10:28:09 +0000 (12:28 +0200)]
Ensure that userspace can remove only user controls.  Controls created
by kernel drivers must not be removed because they might be referenced
in calls to snd_ctl_notify().

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

sound/core/control.c

index bc64b72..a8b7fab 100644 (file)
@@ -436,6 +436,10 @@ static int snd_ctl_remove_user_ctl(struct snd_ctl_file * file,
                ret = -ENOENT;
                goto error;
        }
+       if (!(kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_USER)) {
+               ret = -EINVAL;
+               goto error;
+       }
        for (idx = 0; idx < kctl->count; idx++)
                if (kctl->vd[idx].owner != NULL && kctl->vd[idx].owner != file) {
                        ret = -EBUSY;