]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ALSA: vmaster: Relax __free() variable declarations
authorTakashi Iwai <tiwai@suse.de>
Tue, 16 Dec 2025 14:06:30 +0000 (15:06 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 17 Dec 2025 09:08:30 +0000 (10:08 +0100)
We used to have a variable declaration with __free() initialized with
NULL.  This was to keep the old coding style rule, but recently it's
relaxed and rather recommends to follow the new rule to declare in
place of use for __free() -- which avoids potential deadlocks or UAFs
with nested cleanups.

Although the current code has no bug, per se, let's follow the new
standard and move the declaration to the place of assignment (or
directly assign the allocated result) instead of NULL initializations.

Fixes: fb9e197f3f27 ("ALSA: vmaster: Use automatic cleanup of kfree()")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20251216140634.171890-9-tiwai@suse.de
sound/core/vmaster.c

index c657659b236c4245077afe0479dd6b10f6892456..76cc64245f5df481d0e9f85991f97ba01a24403d 100644 (file)
@@ -56,10 +56,10 @@ struct link_follower {
 
 static int follower_update(struct link_follower *follower)
 {
-       struct snd_ctl_elem_value *uctl __free(kfree) = NULL;
        int err, ch;
+       struct snd_ctl_elem_value *uctl __free(kfree) =
+               kzalloc(sizeof(*uctl), GFP_KERNEL);
 
-       uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
        if (!uctl)
                return -ENOMEM;
        uctl->id = follower->follower.id;
@@ -74,7 +74,6 @@ static int follower_update(struct link_follower *follower)
 /* get the follower ctl info and save the initial values */
 static int follower_init(struct link_follower *follower)
 {
-       struct snd_ctl_elem_info *uinfo __free(kfree) = NULL;
        int err;
 
        if (follower->info.count) {
@@ -84,7 +83,8 @@ static int follower_init(struct link_follower *follower)
                return 0;
        }
 
-       uinfo = kmalloc(sizeof(*uinfo), GFP_KERNEL);
+       struct snd_ctl_elem_info *uinfo __free(kfree) =
+               kmalloc(sizeof(*uinfo), GFP_KERNEL);
        if (!uinfo)
                return -ENOMEM;
        uinfo->id = follower->follower.id;
@@ -341,9 +341,9 @@ static int master_get(struct snd_kcontrol *kcontrol,
 static int sync_followers(struct link_master *master, int old_val, int new_val)
 {
        struct link_follower *follower;
-       struct snd_ctl_elem_value *uval __free(kfree) = NULL;
+       struct snd_ctl_elem_value *uval __free(kfree) =
+               kmalloc(sizeof(*uval), GFP_KERNEL);
 
-       uval = kmalloc(sizeof(*uval), GFP_KERNEL);
        if (!uval)
                return -ENOMEM;
        list_for_each_entry(follower, &master->followers, list) {