]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: ice1712: check snd_ctl_new1() return value
authorZhao Dongdong <zhaodongdong@kylinos.cn>
Wed, 27 May 2026 12:09:11 +0000 (20:09 +0800)
committerTakashi Iwai <tiwai@suse.de>
Thu, 28 May 2026 07:35:52 +0000 (09:35 +0200)
snd_ctl_new1() can return NULL when memory allocation fails. The
ice1712 driver calls snd_ctl_new1() without checking the return value
before dereferencing the pointer in multiple places (ice1712.c,
ice1724.c, aureon.c), which can lead to NULL pointer dereferences.

Add NULL checks after snd_ctl_new1() calls and return -ENOMEM if any
fails.

Assisted-by: Opencode:DeepSeek-V4-Flash
Cc: stable@vger.kernel.org
Fixes: b9a4efd61b6b ("ALSA: ice1712,ice1724: fix the kcontrol->id initialization")
Signed-off-by: Zhao Dongdong <zhaodongdong@kylinos.cn>
Link: https://patch.msgid.link/tencent_42E5E2AB1B6A5101F7EE8C2117F1F687BB07@qq.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ice1712/aureon.c
sound/pci/ice1712/ice1712.c
sound/pci/ice1712/ice1724.c

index 1191a2686dfd20f92d9829d439e1c77725535f34..d6abff2978f3dbe70b18ecf4fa1df11dc77ddc0c 100644 (file)
@@ -1891,6 +1891,8 @@ static int aureon_add_controls(struct snd_ice1712 *ice)
                        for (i = 0; i < ARRAY_SIZE(cs8415_controls); i++) {
                                struct snd_kcontrol *kctl;
                                kctl = snd_ctl_new1(&cs8415_controls[i], ice);
+                               if (!kctl)
+                                       return -ENOMEM;
                                if (i > 1)
                                        kctl->id.device = ice->pcm->device;
                                err = snd_ctl_add(ice->card, kctl);
index 0e27e84d2ce453f2887f5c6eb9233b8c41bb81c1..7d1a357ed90dc348ab32a5497fc6f97963124e30 100644 (file)
@@ -2346,21 +2346,29 @@ int snd_ice1712_spdif_build_controls(struct snd_ice1712 *ice)
        if (snd_BUG_ON(!ice->pcm_pro))
                return -EIO;
        kctl = snd_ctl_new1(&snd_ice1712_spdif_default, ice);
+       if (!kctl)
+               return -ENOMEM;
        kctl->id.device = ice->pcm_pro->device;
        err = snd_ctl_add(ice->card, kctl);
        if (err < 0)
                return err;
        kctl = snd_ctl_new1(&snd_ice1712_spdif_maskc, ice);
+       if (!kctl)
+               return -ENOMEM;
        kctl->id.device = ice->pcm_pro->device;
        err = snd_ctl_add(ice->card, kctl);
        if (err < 0)
                return err;
        kctl = snd_ctl_new1(&snd_ice1712_spdif_maskp, ice);
+       if (!kctl)
+               return -ENOMEM;
        kctl->id.device = ice->pcm_pro->device;
        err = snd_ctl_add(ice->card, kctl);
        if (err < 0)
                return err;
        kctl = snd_ctl_new1(&snd_ice1712_spdif_stream, ice);
+       if (!kctl)
+               return -ENOMEM;
        kctl->id.device = ice->pcm_pro->device;
        err = snd_ctl_add(ice->card, kctl);
        if (err < 0)
index 79d57938a1c8cb9bbec601ee99cb345e56e1bf9b..859bb87393b41361661c2b98ba2bc4b7f33a69d3 100644 (file)
@@ -2388,16 +2388,22 @@ static int snd_vt1724_spdif_build_controls(struct snd_ice1712 *ice)
                return err;
 
        kctl = snd_ctl_new1(&snd_vt1724_spdif_default, ice);
+       if (!kctl)
+               return -ENOMEM;
        kctl->id.device = ice->pcm->device;
        err = snd_ctl_add(ice->card, kctl);
        if (err < 0)
                return err;
        kctl = snd_ctl_new1(&snd_vt1724_spdif_maskc, ice);
+       if (!kctl)
+               return -ENOMEM;
        kctl->id.device = ice->pcm->device;
        err = snd_ctl_add(ice->card, kctl);
        if (err < 0)
                return err;
        kctl = snd_ctl_new1(&snd_vt1724_spdif_maskp, ice);
+       if (!kctl)
+               return -ENOMEM;
        kctl->id.device = ice->pcm->device;
        err = snd_ctl_add(ice->card, kctl);
        if (err < 0)