lkml.org 
[lkml]   [2020]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 131/189] ASoC: topology: Fix memleak in soc_tplg_manifest_load()
    Date
    From: Dragos Tarcatu <dragos_tarcatu@mentor.com>

    commit 242c46c023610dbc0213fc8fb6b71eb836bc5d95 upstream.

    In case of ABI version mismatch, _manifest needs to be freed as
    it is just a copy of the original topology manifest. However, if
    a driver manifest handler is defined, that would get executed and
    the cleanup is never reached. Fix that by getting the return status
    of manifest() instead of returning directly.

    Fixes: 583958fa2e52 ("ASoC: topology: Make manifest backward compatible from ABI v4")
    Signed-off-by: Dragos Tarcatu <dragos_tarcatu@mentor.com>
    Link: https://lore.kernel.org/r/20200207185325.22320-3-dragos_tarcatu@mentor.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/soc/soc-topology.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    --- a/sound/soc/soc-topology.c
    +++ b/sound/soc/soc-topology.c
    @@ -2503,7 +2503,7 @@ static int soc_tplg_manifest_load(struct
    {
    struct snd_soc_tplg_manifest *manifest, *_manifest;
    bool abi_match;
    - int err;
    + int ret = 0;

    if (tplg->pass != SOC_TPLG_PASS_MANIFEST)
    return 0;
    @@ -2516,19 +2516,19 @@ static int soc_tplg_manifest_load(struct
    _manifest = manifest;
    } else {
    abi_match = false;
    - err = manifest_new_ver(tplg, manifest, &_manifest);
    - if (err < 0)
    - return err;
    + ret = manifest_new_ver(tplg, manifest, &_manifest);
    + if (ret < 0)
    + return ret;
    }

    /* pass control to component driver for optional further init */
    if (tplg->comp && tplg->ops && tplg->ops->manifest)
    - return tplg->ops->manifest(tplg->comp, tplg->index, _manifest);
    + ret = tplg->ops->manifest(tplg->comp, tplg->index, _manifest);

    if (!abi_match) /* free the duplicated one */
    kfree(_manifest);

    - return 0;
    + return ret;
    }

    /* validate header magic, size and type */

    \
     
     \ /
      Last update: 2020-03-10 14:02    [W:4.149 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site