OSDN Git Service

ASoC: soc-core: fix null-ptr-deref in snd_soc_del_component_unlocked()
authorYang Yingliang <yangyingliang@huawei.com>
Sat, 9 Oct 2021 06:58:40 +0000 (14:58 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 11 Oct 2021 12:19:14 +0000 (13:19 +0100)
'component' is allocated in snd_soc_register_component(), but component->list
is not initalized, this may cause snd_soc_del_component_unlocked() deref null
ptr in the error handing case.

KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
RIP: 0010:__list_del_entry_valid+0x81/0xf0
Call Trace:
 snd_soc_del_component_unlocked+0x69/0x1b0 [snd_soc_core]
 snd_soc_add_component.cold+0x54/0x6c [snd_soc_core]
 snd_soc_register_component+0x70/0x90 [snd_soc_core]
 devm_snd_soc_register_component+0x5e/0xd0 [snd_soc_core]
 tas2552_probe+0x265/0x320 [snd_soc_tas2552]
 ? tas2552_component_probe+0x1e0/0x1e0 [snd_soc_tas2552]
 i2c_device_probe+0xa31/0xbe0

Fix by adding INIT_LIST_HEAD() to snd_soc_component_initialize().

Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Link: https://lore.kernel.org/r/20211009065840.3196239-1-yangyingliang@huawei.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index c830e96..80ca260 100644 (file)
@@ -2599,6 +2599,7 @@ int snd_soc_component_initialize(struct snd_soc_component *component,
        INIT_LIST_HEAD(&component->dai_list);
        INIT_LIST_HEAD(&component->dobj_list);
        INIT_LIST_HEAD(&component->card_list);
+       INIT_LIST_HEAD(&component->list);
        mutex_init(&component->io_mutex);
 
        component->name = fmt_single_name(dev, &component->id);