rtd's flexible arrays are typeof struct snd_soc_component *components[] which means struct_pointer flexible arrays sizeof(component) will allocate sizeof(struct snd_soc_component), but here only need sizeof(struct snd_soc_component *)
------------------ 原始邮件 ------------------ 发件人: "Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>; 发送时间: 2022年11月10日(星期四) 晚上7:02 收件人: "lishqchn"<lishqchn@qq.com>;"perex"<perex@perex.cz>;"tiwai"<tiwai@suse.com>; 抄送: "alsa-devel"<alsa-devel@alsa-project.org>;"broonie"<broonie@kernel.org>;"lgirdwood"<lgirdwood@gmail.com>;"linux-kernel"<linux-kernel@vger.kernel.org>; 主题: Re: [PATCH] Asoc: core: fix wrong size kzalloc for rtd's components member
On 11/8/2022 5:24 AM, lishqchn wrote: > The actual space for struct snd_soc_component has been allocated by > snd_soc_register_component, here rtd's components are pointers to > components, I replace the base size from *component to component. > > Signed-off-by: lishqchn <lishqchn@qq.com> > --- > sound/soc/soc-core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c > index a6d6d10cd471..d21e0284b2aa 100644 > --- a/sound/soc/soc-core.c > +++ b/sound/soc/soc-core.c > @@ -459,7 +459,7 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime( > */ > rtd = devm_kzalloc(dev, > sizeof(*rtd) + > - sizeof(*component) * (dai_link->num_cpus + > + sizeof(component) * (dai_link->num_cpus + > dai_link->num_codecs + > dai_link->num_platforms), > GFP_KERNEL);
Can't struct_size macro be used instead, it is meant to be used when calculating size of structs containing flexible arrays at the end?