lkml.org 
[lkml]   [2020]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.7 194/388] ASoC: ux500: mop500: Fix some refcounted resources issues
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    [ Upstream commit 4e8748fcaeec073e3ba794871ce86c545e4f961f ]

    There are 2 issues here:
    - if one of the 'of_parse_phandle' fails, calling 'mop500_of_node_put()'
    is a no-op because the 'mop500_dai_links' structure has not been
    initialized yet, so the referenced are not decremented
    - The reference stored in 'mop500_dai_links[i].codecs' is refcounted
    only once in the probe and must be decremented only once.

    Fixes: 39013bd60e79 ("ASoC: Ux500: Dispose of device nodes correctly")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/20200512100705.246349-1-christophe.jaillet@wanadoo.fr
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/ux500/mop500.c | 11 +++++++----
    1 file changed, 7 insertions(+), 4 deletions(-)

    diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c
    index 2873e8e6f02b..cdae1190b930 100644
    --- a/sound/soc/ux500/mop500.c
    +++ b/sound/soc/ux500/mop500.c
    @@ -63,10 +63,11 @@ static void mop500_of_node_put(void)
    {
    int i;

    - for (i = 0; i < 2; i++) {
    + for (i = 0; i < 2; i++)
    of_node_put(mop500_dai_links[i].cpus->of_node);
    - of_node_put(mop500_dai_links[i].codecs->of_node);
    - }
    +
    + /* Both links use the same codec, which is refcounted only once */
    + of_node_put(mop500_dai_links[0].codecs->of_node);
    }

    static int mop500_of_probe(struct platform_device *pdev,
    @@ -81,7 +82,9 @@ static int mop500_of_probe(struct platform_device *pdev,

    if (!(msp_np[0] && msp_np[1] && codec_np)) {
    dev_err(&pdev->dev, "Phandle missing or invalid\n");
    - mop500_of_node_put();
    + for (i = 0; i < 2; i++)
    + of_node_put(msp_np[i]);
    + of_node_put(codec_np);
    return -EINVAL;
    }

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-18 04:40    [W:3.222 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site