History

ASoC: rsnd: Fix potential out-of-bounds access of component_dais[]

component_dais[RSND_MAX_COMPONENT] is initially zero-initialized and later populated in rsnd_dai_of_node(). However, the existing boundary check: if (i >= RSND_MAX_COMPONENT) does not guarantee that the last valid element remains zero. As a result, the loop can rely on component_dais[RSND_MAX_COMPONENT] being zero, which may lead to an out-of-bounds access. Found by Linux Verification Center (linuxtesting.org) with SVACE.

Denis Rastyogin committed 7 months ago

Commit f9e437c1 parent 0178e641 file · +1 −1Browse files

Unified · Split

sound/soc/renesas/rcar/core.c+1−1
@@ -1974,7 +1974,7 @@ static int rsnd_probe(struct platform_device *pdev) · 1973 unmodified lines
19741974 * asoc register
19751975 */
19761976 ci = 0;
1977− for (i = 0; priv->component_dais[i] > 0; i++) {
1977+ for (i = 0; i < RSND_MAX_COMPONENT && priv->component_dais[i] > 0; i++) {
19781978 int nr = priv->component_dais[i];
19791979
19801980 ret = devm_snd_soc_register_component(dev, &rsnd_soc_component,