ASoC: rt5682: Fix crash due to out of scope stack vars
commit 4999d703c0e66f9f196b6edc0b8fdeca8846b8b6 upstream.
Move the declaration of temporary arrays to somewhere that won't go out
of scope before the devm_clk_hw_register() call, lest we be at the whim
of the compiler for whether those stack variables get overwritten.
Fixes a crash seen with gcc version 11.2.1 20210728 (Red Hat 11.2.1-1)
Fixes: edbd24ea1e
("ASoC: rt5682: Drop usage of __clk_get_name()")
Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20211118010453.843286-1-robdclark@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
bdd8129c66
commit
2f4764fe36
@@ -2797,6 +2797,8 @@ static int rt5682_register_dai_clks(struct snd_soc_component *component)
|
|||||||
|
|
||||||
for (i = 0; i < RT5682_DAI_NUM_CLKS; ++i) {
|
for (i = 0; i < RT5682_DAI_NUM_CLKS; ++i) {
|
||||||
struct clk_init_data init = { };
|
struct clk_init_data init = { };
|
||||||
|
struct clk_parent_data parent_data;
|
||||||
|
const struct clk_hw *parent;
|
||||||
|
|
||||||
dai_clk_hw = &rt5682->dai_clks_hw[i];
|
dai_clk_hw = &rt5682->dai_clks_hw[i];
|
||||||
|
|
||||||
@@ -2804,17 +2806,17 @@ static int rt5682_register_dai_clks(struct snd_soc_component *component)
|
|||||||
case RT5682_DAI_WCLK_IDX:
|
case RT5682_DAI_WCLK_IDX:
|
||||||
/* Make MCLK the parent of WCLK */
|
/* Make MCLK the parent of WCLK */
|
||||||
if (rt5682->mclk) {
|
if (rt5682->mclk) {
|
||||||
init.parent_data = &(struct clk_parent_data){
|
parent_data = (struct clk_parent_data){
|
||||||
.fw_name = "mclk",
|
.fw_name = "mclk",
|
||||||
};
|
};
|
||||||
|
init.parent_data = &parent_data;
|
||||||
init.num_parents = 1;
|
init.num_parents = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RT5682_DAI_BCLK_IDX:
|
case RT5682_DAI_BCLK_IDX:
|
||||||
/* Make WCLK the parent of BCLK */
|
/* Make WCLK the parent of BCLK */
|
||||||
init.parent_hws = &(const struct clk_hw *){
|
parent = &rt5682->dai_clks_hw[RT5682_DAI_WCLK_IDX];
|
||||||
&rt5682->dai_clks_hw[RT5682_DAI_WCLK_IDX]
|
init.parent_hws = &parent;
|
||||||
};
|
|
||||||
init.num_parents = 1;
|
init.num_parents = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Reference in New Issue
Block a user