Commit 27862d5a authored by Wen Yang's avatar Wen Yang Committed by Mark Brown

ASoC: simple-card: fix an use-after-free in simple_for_each_link()

The codec variable is still being used after the of_node_put() call,
which may result in use-after-free.

Fixes: d947cdfd ("ASoC: simple-card: cleanup DAI link loop method - step1")
Link: https://lore.kernel.org/r/1562743509-30496-3-git-send-email-wen.yang99@zte.com.cnSigned-off-by: default avatarWen Yang <wen.yang99@zte.com.cn>
Acked-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 724808ad
...@@ -364,8 +364,6 @@ static int simple_for_each_link(struct asoc_simple_priv *priv, ...@@ -364,8 +364,6 @@ static int simple_for_each_link(struct asoc_simple_priv *priv,
goto error; goto error;
} }
of_node_put(codec);
/* get convert-xxx property */ /* get convert-xxx property */
memset(&adata, 0, sizeof(adata)); memset(&adata, 0, sizeof(adata));
for_each_child_of_node(node, np) for_each_child_of_node(node, np)
...@@ -387,11 +385,13 @@ static int simple_for_each_link(struct asoc_simple_priv *priv, ...@@ -387,11 +385,13 @@ static int simple_for_each_link(struct asoc_simple_priv *priv,
ret = func_noml(priv, np, codec, li, is_top); ret = func_noml(priv, np, codec, li, is_top);
if (ret < 0) { if (ret < 0) {
of_node_put(codec);
of_node_put(np); of_node_put(np);
goto error; goto error;
} }
} }
of_node_put(codec);
node = of_get_next_child(top, node); node = of_get_next_child(top, node);
} while (!is_top && node); } while (!is_top && node);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment