| From eb32fe0e6beb36399c60f730ab59948d5a20ed31 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 16 Dec 2025 15:06:30 +0100 |
| Subject: ALSA: vmaster: Relax __free() variable declarations |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| [ Upstream commit 3b7c7bda39e1e48f926fb3d280a5f5d20a939857 ] |
| |
| 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 |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/core/vmaster.c | 12 ++++++------ |
| 1 file changed, 6 insertions(+), 6 deletions(-) |
| |
| diff --git a/sound/core/vmaster.c b/sound/core/vmaster.c |
| index c657659b236c4..76cc64245f5df 100644 |
| --- a/sound/core/vmaster.c |
| +++ b/sound/core/vmaster.c |
| @@ -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) { |
| -- |
| 2.51.0 |
| |