ALSA: control_led - fix the stack usage (control element ops)
authorJaroslav Kysela <perex@perex.cz>
Wed, 14 Apr 2021 10:58:58 +0000 (12:58 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 14 Apr 2021 12:23:05 +0000 (14:23 +0200)
It's a bad idea to allocate big structures on the stack.
Mark the variables as static and add a note for the locking.

Fixes: 22d8de62f11b ("ALSA: control - add generic LED trigger module as the new control layer")
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/r/20210414105858.1937710-1-perex@perex.cz
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/control_led.c

index 93b2010..25f57c1 100644 (file)
@@ -94,11 +94,15 @@ static struct snd_ctl_led *snd_ctl_led_get_by_access(unsigned int access)
        return &snd_ctl_leds[group];
 }
 
+/*
+ * A note for callers:
+ *   The two static variables info and value are protected using snd_ctl_led_mutex.
+ */
 static int snd_ctl_led_get(struct snd_ctl_led_ctl *lctl)
 {
+       static struct snd_ctl_elem_info info;
+       static struct snd_ctl_elem_value value;
        struct snd_kcontrol *kctl = lctl->kctl;
-       struct snd_ctl_elem_info info;
-       struct snd_ctl_elem_value value;
        unsigned int i;
        int result;