lkml.org 
[lkml]   [2022]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 115/230] ASoC: rt5682: fix an incorrect NULL check on list iterator
    Date
    From: Xiaomeng Tong <xiam0nd.tong@gmail.com>

    [ Upstream commit c8618d65007ba68d7891130642d73e89372101e8 ]

    The bug is here:
    if (!dai) {

    The list iterator value 'dai' will *always* be set and non-NULL
    by for_each_component_dais(), so it is incorrect to assume that
    the iterator value will be NULL if the list is empty or no element
    is found (In fact, it will be a bogus pointer to an invalid struct
    object containing the HEAD). Otherwise it will bypass the check
    'if (!dai) {' (never call dev_err() and never return -ENODEV;)
    and lead to invalid memory access lately when calling
    'rt5682_set_bclk1_ratio(dai, factor);'.

    To fix the bug, just return rt5682_set_bclk1_ratio(dai, factor);
    when found the 'dai', otherwise dev_err() and return -ENODEV;

    Cc: stable@vger.kernel.org
    Fixes: ebbfabc16d23d ("ASoC: rt5682: Add CCF usage for providing I2S clks")
    Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com>
    Link: https://lore.kernel.org/r/20220327081002.12684-1-xiam0nd.tong@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/codecs/rt5682.c | 11 ++++-------
    1 file changed, 4 insertions(+), 7 deletions(-)

    diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c
    index 80d199843b8c..8a9e1a4fa03e 100644
    --- a/sound/soc/codecs/rt5682.c
    +++ b/sound/soc/codecs/rt5682.c
    @@ -2822,14 +2822,11 @@ static int rt5682_bclk_set_rate(struct clk_hw *hw, unsigned long rate,

    for_each_component_dais(component, dai)
    if (dai->id == RT5682_AIF1)
    - break;
    - if (!dai) {
    - dev_err(rt5682->i2c_dev, "dai %d not found in component\n",
    - RT5682_AIF1);
    - return -ENODEV;
    - }
    + return rt5682_set_bclk1_ratio(dai, factor);

    - return rt5682_set_bclk1_ratio(dai, factor);
    + dev_err(rt5682->i2c_dev, "dai %d not found in component\n",
    + RT5682_AIF1);
    + return -ENODEV;
    }

    static const struct clk_ops rt5682_dai_clk_ops[RT5682_DAI_NUM_CLKS] = {
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-11 11:51    [W:4.081 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site