Patch "ASoC: rt5682: fix an incorrect NULL check on list iterator" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ASoC: rt5682: fix an incorrect NULL check on list iterator

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     asoc-rt5682-fix-an-incorrect-null-check-on-list-iter.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 15f05c1212d9a693668dd609552053578031b19b
Author: Xiaomeng Tong <xiam0nd.tong@xxxxxxxxx>
Date:   Sun Mar 27 16:10:02 2022 +0800

    ASoC: rt5682: fix an incorrect NULL check on list iterator
    
    [ 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@xxxxxxxxxxxxxxx
    Fixes: ebbfabc16d23d ("ASoC: rt5682: Add CCF usage for providing I2S clks")
    Signed-off-by: Xiaomeng Tong <xiam0nd.tong@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20220327081002.12684-1-xiam0nd.tong@xxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

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] = {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux