aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
authorQuan Sun <2022090917019@std.uestc.edu.cn>2026-05-14 21:22:45 +0800
committerTakashi Iwai <tiwai@suse.de>2026-05-15 09:09:07 +0200
commit9921941929ab014038c357b30567d93d20393a94 (patch)
tree3f8997aa0a5344207920f87d8ed9c48307c0fd3b /sound
parentfd87b510f5f543125ecf51e7c706a9f4bc3352be (diff)
downloadlinux-next-history-9921941929ab014038c357b30567d93d20393a94.tar.gz
ALSA: hda: Fix NULL pointer dereference in snd_hda_ctl_add()
snd_hda_ctl_add() dereferences kctl->id.subdevice without checking whether kctl is NULL. Multiple callers in sound/hda/codecs/ca0132.c pass the return value of snd_ctl_new1() directly to snd_hda_ctl_add() without a NULL check: return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); snd_ctl_new1() returns NULL when the underlying snd_ctl_new() fails on memory allocation (kzalloc_flex),which can occur under memory pressure or via fault injection. Add a NULL check at the entry of snd_hda_ctl_add(), matching the pattern already used by snd_ctl_add_replace() at the same call path (sound/core/control.c:515). Return -EINVAL to let callers handle the error gracefully. Fixes: 44f0c9782cc6 ("ALSA: hda/ca0132: Add tuning controls") Signed-off-by: Quan Sun <2022090917019@std.uestc.edu.cn> Link: https://patch.msgid.link/20260514132245.3062884-1-2022090917019@std.uestc.edu.cn Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/hda/common/codec.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sound/hda/common/codec.c b/sound/hda/common/codec.c
index c2af2511a8316..81f266b9b850f 100644
--- a/sound/hda/common/codec.c
+++ b/sound/hda/common/codec.c
@@ -1699,6 +1699,9 @@ int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
unsigned short flags = 0;
struct hda_nid_item *item;
+ if (!kctl)
+ return -EINVAL;
+
if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
flags |= HDA_NID_ITEM_AMP;
if (nid == 0)